sed stream edit 非交互式 對文件作編輯的工具正則表達式
語法格式
sed [選項] '動做' 文件列表
sed [選項] '條件動做' 文件列表vim
以行爲處理單位 一次處理一行 逐行處理
默認把處理結果輸出到屏幕bash
+++++++++++++++++++++++++++++++++++++++++++++++ide
選項:工具
-n #屏蔽默認輸出spa
-i 直接修改文件內容3d
-f 使用sed腳本字符串
+++++++++++++++++++++++++it
vim test.sedclass
s/haha/xixi
s/[0-9]//g
........
:wq
sed -f test.txt a.txt
+++++++++++++++++++++++++
-e 可指定多個處理動做
-r 啓用擴展的正則表達式,若與其餘選項一塊兒用應做爲首個選項
{} 可組合多個命令,以分號分隔
處理動做:
p打印行
2,4p 輸出第234行
2p;4p 輸出第2和第4行
d刪除行 (刪除一行)
2,4d 刪除第234行
s 字符串替換
s/old/new 將每行的第一個old替換爲new
s/old/new/3 將每行的第3個old替換爲new
s/old/new/g 將全部的old替換爲new
++++++++++++++++++++++++++++++++++++++++++++
p打印行
sed 'p' a.txt 輸出全部行不屏蔽默認輸出(出現兩遍內容)
sed -n 'p' a.txt 輸出全部行 sed -n '3p' a.txt
cat -b a.txt
sed -n '3p' a.txt 輸出第三行
sed -n '3,5p' a.txt 輸出345行
sed -n '$p' a.txt 輸出最後一行
sed -n '1p;5p;$p' a.txt 輸出1,5,和最後一行
sed -n '/^r/p' a.txt 輸出以r開頭的行
sed -n '/h$/p' a.txt 輸出以h結尾的行
sed -n '/h/p' a.txt 輸出帶h的行
sed -n 'p;p;p' a.txt 把每行內容輸出3次
sed -n '3,+10p' a.txt 輸出第3行及其後10行的內容
sed -n 'p;n' a.txt 輸出奇數行,n表示讀入下一行文本(隔行)
sed -n 'n;p' a.txt 輸出偶數行,n表示讀入下一行文本(隔行)
sed -n '$=' a.txt 輸出文件的行數
sed -n '10,${n;p}' a.txt 輸出第10行到最後一行全部的偶數行
---------------------------------------------------------------------
d刪除行 (刪除一行) 不帶-i不修改原文件
sed '1d' a.txt 刪除第一行
sed '$d' a.txt 刪除最後一行
sed '1,3d' a.txt 刪除第123行
sed '/r/d' a.txt 刪除包含r的行
sed '/r/!d' a.txt 刪除不包含r的行
sed '/^r/d' a.txt 刪除以r開頭的行
sed '/^$/d' a.txt 刪除全部空行
sed '/^$/{n;/^$/d}' 刪除重複空行,連續兩個空行只保留一個
sed '/^[rds]/d' a.txt 刪除分別以r,d,s開頭的行
sed -i '$d' /etc/passwd 刪除文件的最後一行,修改原文件
----------------------------------------------------------------------
a/i添加行 (添加一行)
a 在當前行下方添加新行
i 在當前行上方添加新行
sed 'a內容' a.txt
echo cccccccccccc > a.txt
sed 'aFFFFFFFFF' a.txt 在沒行的下方添加內容FFFF...
sed 'iFFFFFFFFF' a.txt 在沒行的上方添加內容FFFF...
echo 11111111 >> a.txt
sed '$aFFFFFFFFF' a.txt 在最後一行的下方添加
sed '1aFFFFFFFFF' a.txt 在第一行添加
echo ccccccccccc >> a.txt
sed '/^c/aFFFFFFFFF' a.txt 在以c開頭的行添加
sed -i '/^c/aFFFFFFFFF' a.txt 在以c開頭的行添加,修改原文件
sed -i '$ayzs:x:2001:2001:tea:/home/yzs:/bin/bash' /etc/passwd 在最後一行的上邊添加內容
sed '1,3aF' a.txt 在第123行的上邊添加
sed -e 'aF' -e 'aX' -e 'aW' a.txt 在每行的上邊分別都添加FXW,都隔行
--------------------------------------------------------------------
c替換行 (以行爲替換單位)
sed 'c內容' a.txt
sed '條件c內容' a.txt
sed 'cPLJ' a.txt 把每行替換成PLJ
sed '1cPLJ' a.txt 把第一行替換成PLJ
sed '2,5cPLJ' a.txt 把第2345行替換成PLJ
sed -e '2cPLJ' -e '3cPLJ' a.txt 指定多個處理動做替換
sed -i '/^a/cT' a.txt 把以a開頭的行替換成T -i處理原文件
--------------------------------------------------------------------
sed 's/aa/bb/' a.txt 將每行的第一個aa 替換成bb
sed 's/aa/bb/3' a.txt 將每行的第3個aa 替換成bb
sed 's/aa/bb/g' a.txt 將全部的aa 替換成bb
sed 's/aa//g' a.txt 將全部的aa刪除
sed 's/aa/&s/g' a.txt 將全部的aa 替換成aabb,&表明前邊的查找串
sed '4,7s/^/#/g' a.txt 將第4-7行註釋掉
sed 's/^an#/an/' a.txt 去除以an開頭行的注視
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
導入導出操做
r 讀取文件 :
3r b.txt 在第3行文件下方插入文件b.txt
sed '3r b.txt' a.txt
4,7r b.txt 在第4-7行每一行的下方插入文件b.txt
sed '4,7r b.txt' a.txt
w 保存到文件:
3w c.txt 將第3行另存到文件c.txt
sed '3w c.txt' a.txt
4,7w c.txt 將第4-7行另存到文件c.txt
sed '4,7w c.txt' a.txt
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
sed 複製剪切
基本動做
複製: H:模式空間--追加--保持空間
h:模式空間--覆蓋--保持空間
粘貼: G:保持空間--追加--模式空間
g:保持空間--覆蓋--模式空間
複製把文件1-2行復制到文件的末尾
sed -n '1h;2H;p' a.txt
剪切
把文件1-2行剪切到文件的末尾
sed '1h;2H;1,2d;$G' a.txt
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
後向引用 (-r 表示轉義)
保存替換時的源數據,在替換時使用源數據作替換。最多用9個()
()()()()()()()()()
\1\2..............\9
sed -r '1s/(^.)(.*)/\1/' a.txt 把第一行替換成第一行的第一個字母
sed -r 's/(^.)(.*)/\1/' a.txt 把全部行替換成每一行的第一個字母
sed -r 's/(^.)(.*)/\2/' a.txt 把每一行第一個字符去掉
sed -r '1s/(^.)(.*)(.$)/\3\2\1/' a.txt 把第一行第一個字符和最後一個字符對調
sed -r '1s/(^.)(.*)(.$)/\2/' a.txt 把第一行的第一個字符和最後一個字符去掉
sed -r '1s/(^.)(.*)(.$)/\1\3/' a.txt 只保留第一行的第一個字符和最後一個字符
sed -r '1s/(^.)(.*)(.$)/\1abc\3/' a.txt 把第一行第一個字符和最後一個字符保留而且中間加字母abc
sed -r 's/(^.)(.*)(.$)/\1abc\3/' a.txt 把第每行的第一個字符和最後一個字符保留而且中間加字母abc
sed -r 's/(^.)(.*)(.$)/\2\3/' a.txt 把每行的第一個字符去掉
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
& 保存替換時的源數據
sed -r 's/^./[&]/' a.txt 把每行的第一個字符用[ ]擴起來
sed '2s/lisi/&user/' a.txt 把第二行的lisi後面加上字母user sed '2s/lisi/[&]/' a.txt 把第二行的lisi用[ ]擴起來