常用sed用法

sed是一種流編輯器,它是文本處理中非常中的工具,能夠完美的配合正則表達式使用,功能不同凡響。處理時,把當前處理的行存儲在臨時緩衝區中,稱爲“模式空間”(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行,這樣不斷重複,直到文件末尾。文件內容並沒有 改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反覆操作;編寫轉換程序等。
sed基本格式

sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)

打印單行

  sed -n '行號p' stop_crm_http_forcboss_new_01.sh

打印範圍
sed -n '行號,行號p' stop_crm_http_forcboss_new_01.sh
打印有此模式的行

`sed -n '/cboss/'p stop_crm_http_forcboss_new_01.sh  
  等於  
cat stop_crm_http_forcboss_new_01.sh|grep cboss`
    最後一行插入字符
  sed -i '$a\要插入的字符'
   文件名在指定行行首插入字符(s 表示替換指定字符;^表示匹配行的開始,如:/^sed/匹配所有以sed開頭的行。$表示匹配行的結束,如:/sed$/匹配所有以sed結尾的行。)
  sed -i '行號s/^/要插入的字符/' 文件名

sed中使用變量用單引號包含雙引號來引用變量,或者使用雙引號。g表示 獲得內存緩衝區的內容,並替代當前模板塊中的文本。

  sed 's/'"${tmp}"'/'"${new_tmp}"'/g' ${new_file_name}
sed "s/${tmp}/${new_tmp}/g" ${new_file_name}

有時替換不想全部替換,可以使用,如下,從第二處匹配的地方開始替換

sed 's/'"${tmp}"'/'"${new_tmp}"'/2g' ${new_file_name}
刪除行首空格
sed 's/^[ \t]*//g'
刪除行末空格
sed 's/[ \t]*$//g'
刪除所有的空格
sed 's/[[:space:]]//g'
刪除空白行:
sed '/^$/d' file
刪除文件的第2行:
sed '2d' file
刪除文件的第2行到末尾所有行:
sed '2,$d' file
刪除文件最後一行:
sed '$d' file
刪除文件中所有開頭是test的行:
sed '/^test/'d file

sed中使用或者,將A或者B替換成C。用中括號,裏面使用‘|’符號

sed ‘s/[A|B]/C/g’ stop_crm_http_forcboss_new_10.sh

已匹配字符串標記&(正則表達式 \w+ 匹配每一個單詞,使用 [&] 替換它,& 對應於之前所匹配到的單詞)

echo this is a test line | sed 's/\w\+/[&]/g'
[this] [is] [a] [test] [line]

所有以192.168.0.1開頭的行都會被替換成它自已加localhost:

sed 's/^192.168.0.1/&localhost/' file
192.168.0.1localhost

一般sed使用”/”作爲定界符,但是也是可以用任何的定界符

sed 's:test:TEXT:g'
sed 's|test|TEXT|g'
sed 's:/bin/sh:/bin/bash:g' tmp.txt
當轉換的內容含有定界符,需要轉義

sed 's/\/bin\/sh/\/bin\/bash/g' tmp.txt

多點編輯:e命令( 同一行裏執行多條命令, -e 等價的命令是 –expression)

sed -e '1,5d' -e 's/test/check/' file

從文件讀入:r命令
file裏的內容被讀進來,顯示在與test匹配的行後面,如果匹配多行,則file的內容將顯示在所有匹配行的下面:
sed ‘/test/r file’ filename

寫入文件:w命令
在example中所有包含test的行都被寫入file裏:
sed -n ‘/test/w file’ example

插入(行上):i\命令
將 this is a test line 追加到以test開頭的行前面:
sed ‘/^test/i\this is a test line’ file

在test.conf文件第5行之前插入this is a test line:
sed -i ‘5i\this is a test line’ test.conf

下一個:n命令
如果test被匹配,則移動到匹配行的下一行,替換這一行的aa,變爲bb,並打印該行,然後繼續:
sed ‘/test/{ n; s/aa/bb/; }’ file

變形:y命令
把1~10行內所有abcde轉變爲大寫,兩邊的字符數需要相等。注意,正則表達式元字符不能使用這個命令:
sed ‘1,10y/abcde/ABCDE/’ file

退出:q命令
打印完第10行後,退出sed
sed ‘10q’ file

保持和獲取:h命令和G命令
在sed處理文件的時候,每一行都被保存在一個叫模式空間的臨時緩衝區中,除非行被刪除或者輸出被取消,否則所有被處理的行都將 打印在屏幕上。接着模式空間被清空,並存入新的一行等待處理。

sed -e '/test/h' -e '$G' file

在這個例子裏,匹配test的行被找到後,將存入模式空間,h命令將其複製並存入一個稱爲保持緩存區的特殊緩衝區內。第二條語句的意思是,當到達最後一行後,G命令取出保持緩衝區的行,然後把它放回模式空間中,且追加到現在已經存在於模式空間中的行的末尾。在這個例子中就是追加到最後一行。簡單來說,
任何包含test的行都被複制並追加到該文件的末尾
。保持和互換:h命令和x命令
互換模式空間和保持緩衝區的內容。也就是把包含test與check的行互換:
sed -e ‘/test/h’ -e ‘/check/x’ file

打印奇數行或偶數行
方法1:

sed -n 'p;n' test.txt #奇數行
sed -n 'n;p' test.txt #偶數行

方法2:

sed -n '1~2p' test.txt #奇數行
sed -n '2~2p' test.txt #偶數行打印

匹配字符串的下一行

grep -A 1 SCCFILE                                           #1可以變,也可以打印SCC匹配行下兩行
sed -n '/SCC/{n;p}' FILE
awk '/SCC/{getline; print}' FILE
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章