天天看點

linux中sed學習小結

sed行處理工具

1、顯示檔案中比對行

cat tmp.txt|sed -n '/比對字元正則/p' (-n是不列印全部檔案)

2、顯示檔案第幾行

cat tmp.txt|sed -n '1p' --第一行--

cat tmp.txt|sed -n '1,3p' --一到三行--

3、替換檔案中字元

cat tmp.txt | sed 's/ee/ff/' 或者 sed 's/ee/ff/' tmp.txt --将tmp.txt檔案中每行第一個比對的ee替換為ff,不改變原檔案--

cat tmp.txt | sed 's/ee/ff/g' 或者 sed 's/ee/ff/g' tmp.txt --将tmp.txt檔案中,全部ee替換為ff,不改變原檔案--sed 's/ee/ff/' tmp.txt > tmp2.txt --将tmp.txt檔案中ee替換為ff,不改變原檔案,新生成一個新的tmp2.txt檔案--

改變原檔案:sed -i 's/ee/ff/' tmp.txt

4、指定行替換

cat tmp.txt |sed '3,5s/ee/ff/' --将檔案中3到5行替換ee為ff--

5、比對行的替換

cat tmp.txt | sed '/^w/s/ee/ff/' --将tmp.txt檔案中,以w開頭行中的ee替換為ff--

cat tmp.txt | sed '/^w/,/^x/s/ee/ff/' --将tmp.txt檔案中,以w開頭到x開頭之間的行的ee替換為ff--

6、批量重命名檔案名例有檔案:

aa.txt bb.txt cc.txt 将其重命為aa.jpg bb.jpg cc.jpg

ls |sed 's/\(.*\)\.txt/mv \1\.txt \1\.jpg/'|sh

\( )\為記憶體空間,将比對的aa bb cc記錄下來,\1為記憶體空間的第一個比對生成mv的指令代碼,通過sh執行--

7、删除比對行--不顯示出來,不修改源檔案

隻删除第二行:$ sed '2 d' employee.txt

删除1到4行:$ sed '1,4 d' employee.txt

删除從第二行到最後一行:$ sed '2,$ d' employee.txt

隻删除奇數行:$ sed '1~2 d' employee.txt

删除所有包含'Manager'的行:$ sed '/Manager/ d' employee.txt

删除第一次包含'Jason'的行到第四行:$ sed '/Jason/,4 d' employee.txt

删除從第一次比對'Raj'的行 到比對'Jane'之間的行:$ sed '/Raj/,/Jane/ d' employee.txt

删除比對'Jason'的行及它下面兩行:$ sed '/Jason/,+2 d' employee.txt

一些有用的删除例子

從一個檔案删除所有空行:sed '/^$/ d' employee.txt

删除所有注釋行(假設注釋以#開頭):sed '/^#/ d' employee.txt

本文轉自 00_yatou 51CTO部落格,原文連結:http://blog.51cto.com/ql0722/1614750,如需轉載請自行聯系原作者

繼續閱讀