sed 用法(轉)
阿新 • • 發佈:2022-04-08
sed 比較實用的(去掉windows下回車符及空白符) windows下的回車符為 /r/n 而unix下的回車符是 /n 1.去掉所有行的空格 sed -i 's/ //g' df.txt 2.去掉所有行的空格 sed -e 's/ //g' df.txt >cwm.txt 3.將每一行拖尾的“空白字元”(空格,製表符)刪除 sed 's/ *$//' df.txt >cwm.txt 4.將每一行中的前導和拖尾的空白字元刪除 sed 's/^ *//;s/ *$//' df.txt >cwm.txt 5.去掉空行 sed '/^$/d' df.txt >cwm.txt sed -e '/^$/d' df.txt >cwm.txt sed -i '/^$/d' df.txt 這三個是等價的 但第三個會改變原檔案 6.去掉windows下的回車符 (注意^M 在linux 下寫法 按^M 是回車換行符,輸入方法是按住CTRL+v,鬆開v,按m) sed -i 's/^M//g' df.txt 7.去掉windows下的回車符 (注意^M 在linux 下寫法 按^M 是回車換行符,輸入方法是按住CTRL+v,鬆開v,按m) sed -e 's/^M//g' df.txt >cwm.txt 8.sed 用正則表示式 8個字元一組換行 echo "aaaaaaaabbbbbbbbccccccccdddddddd"|sed 's/./{8/}/&/n/g' aaaaaaaa bbbbbbbb cccccccc dddddddd 也等價於 dos2unix df.txt >cwm.txt ******如何去掉檔案中行尾的回車符號^M****** sed 's/^M//g w newfilename' oldfilename 其中: s 表示Searchg 表示搜尋全文,預設是搜尋第一個^M 是回車換行符,輸入方法是按住CTRL+v,鬆開v,按m w 表示寫到新檔案中. 例子1 86103113234778, 86103145878770, 86103116778768, 86103111879708, sed 's/^86//;s/,$//' user.txt #去掉開頭的86 及尾部的,號 例子2 103113234778 103145878770 103116778768 103111879708 sed -e 's/^/86/' user.txt #每行行首加上86 86103113234778 86103145878770 86103116778768 86103111879708 ------------------------------------------------------------------ 我有一個檔案: aaa, bbb, ccc, ddd, eee, fff, 想刪除第3,6,9。。。的空行並且合併12,45,78。。。行, 結果如下: aaa,bbb, ccc,ddd, eee,fff, ....... 解法 sed -e '/^$/d' -e 'N;s//n//g' 或 sed 'N;N;s//n//g' (行數必須是3的倍數,不然最後一行不對) 對於替換單引號外層應加雙引號 sed "s/^/'/;s/$/'/" 營帳GPRS使用者.txt =========================================================================== 用sed 模式空間把時間格式加個空格 [oracle@TestAs4 filter]$ more nd_td.txt 13211124412,2008-08-2613:24:07,2008-08-2615:28:39 13144035749,2008-08-2613:24:06,2008-08-2615:30:39 13144023993,2008-08-2613:19:11,2008-08-2615:37:34 13006601565,2008-08-2612:04:15,2008-08-2615:40:34 13178665198,2008-08-2613:17:49,2008-08-2615:42:35 13058107546,2008-08-2613:08:41,2008-08-2615:49:35 13246005230,2008-08-2613:27:20,2008-08-2615:54:36 [oracle@TestAs4 filter]$ sed 's//(2008-[0-9][0-9]-[0-9][0-9]/)/& /g' nd_td.txt |more 13211124412,2008-08-26 13:24:07,2008-08-26 15:28:39 13144035749,2008-08-26 13:24:06,2008-08-26 15:30:39 13144023993,2008-08-26 13:19:11,2008-08-26 15:37:34 13006601565,2008-08-26 12:04:15,2008-08-26 15:40:34 13178665198,2008-08-26 13:17:49,2008-08-26 15:42:35 13058107546,2008-08-26 13:08:41,2008-08-26 15:49:35 13246005230,2008-08-26 13:27:20,2008-08-26 15:54:36 13169867085,2008-08-26 13:18:14,2008-08-26 15:58:34 13043484284,2008-08-26 12:04:07,2008-08-26 16:03:35 以下兩個都是利用模式空間替換實現的 sed 's//(2008-[0-9][0-9]-[0-9][0-9]/)//1 /g' nd_td.txt |more sed 's//(2008-[0-9][0-9]-[0-9][0-9]/)/([0-9][0-9]:[0-9][0-9]:[0-9][0-9]/)//1 /2/g' nd_td.txt |more #echo ${orjtext0.txt//[!a-z]||[!0-9]} >orjtext1.txt #sed -e 's/^M//g' orjtext01.txt >orjtext0.txt #cat orjtext0.txt|sed s//n/r//n/ >orjtext01.txt #doc2unix orjtext0.txt orjtext01.txt col -b < orjtext0.txt > orjtext01.txt cat orjtext01.txt|grep -v '^#'|sed '/^$/d' >>orjtext02.txt #把#號註釋掉的和空行去掉 #sed -e 's/^#//' orjtext01.txt >orjtext02.txt #把#號註釋掉的行去掉 #sed -i '/^[ /t]*///#d' orjtext01.txt 有時當進行某些配置檔案的檢視時,分去除註釋(如:"#"),但之後還會發現中間也許會有好多空行,所以,現小結一下去除空行的方法。 1)用tr命令 # grep -v "#" /etc/snmp/snmpd.conf | tr -s '/n' 2)用sed命令 # grep -v "#" /etc/snmp/snmpd.conf | sed '/^$/d' 3)用awk命令 # grep -v "#" /etc/snmp/snmpd.conf | awk '{if($0!="")print}' 4)用grep命令 # grep -v "#" /etc/snmp/snmpd.conf | grep -v "^$"