前些天備份使用mysqldump備份出的資料檔案(insert形式),裡面的內容沒有use db_name這個語句,所以如果在指令碼中執行,那麼會提示no database selected,所以就想在裡面新增乙個use db_name的語句。但是因為資料檔案太大,如果直接vim開啟恐怕不行。所以想到sed,然後上網找了一下sed在指定行插入的命令,然而需要注意的是,這些命令雖然可以直接定位到行,但最終如果要檔案內容被更新掉還是要花費一定的時間的,但是這樣會比直接vim開啟檔案然後插入一行效率更高。
下面貼出具體的命令:
1.在指定行前插入一行
sed '2 ittt' -i a.txt # 在第2行前插入ttt,並且將結果更新到a.txt(如果不想將插入真正更新到檔案,去掉後面的-i選項就可以)
2.在指定行後插入一行
sed '2 attt' -i a.txt #在第2行後插入ttt,並且將結果更新到a.txt(如果不想更新原檔案,去掉-i)
3.在指定的多行前面插入
sed 'n,m ittt' -i a.txt #看得懂了吧
4.在指定的多行後面插入
sed 'n,m attt' -i a.txt #看得懂了吧
sed提供了功能太強大了,以後還需要好好學習它,好記性不如爛筆頭哈~~
update 1:
又學習了一下sed常用命令,這篇舉的例子不錯
發現sed真的是太靈活了,另外上面舉的例子,-i表示更新到原檔案,寫在前面後後面都是一樣的效果。 上面都是在指定行插入新行,在匹配的行前面(後面)插入新行的寫法:sed '/test/i\ add a new line' -i a.txt(同理,sed '/test/a\ a new line' -i a.txt則是插入到匹配的行後面)
sed刪除指定行
待處理文字如1 8行文字 cata 1 2345678 sed刪除連續指定行 如1 4行 sed 1,4d a 5678 sed刪除不連續指定行 如第一行和第三行 sed e 1d e 3d a245678 乙個例子 我有乙個list檔案如下 cat list unknown other 2 檔名,...
sed 刪除某一行 sed刪除指定行
待處理文字如1 8行文字 cata1 sed刪除連續指定行 如1 4行 sed 1,4d a5 sed刪除不連續指定行 如第一行和第三行 sed e 1d e 3d a2 乙個例子 我有乙個list檔案如下 cat list unknown other 2 檔名,我要從檔案裡抓取一些資訊,下同,發現...
SHELL 在指定行的前 後插入指定內容
如果知道行號可以用下面的方法 sed i 88 r b.file a.file 在a.txt的第88行插入檔案b.txt awk 1 nr 88 a.file a.file 如果不知道行號,可以用正則匹配 sed i regex r b.txt a.txt regex是正規表示式 awk targe...