SED

sed使用參數

[root@www ~]# sed [-nefr] [動作]
選項與參數:
-n :使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN 的數據一般都會被列出到終端上。但如果加上 -n 參數後,則只有經過sed 特殊處理的那一行(或者動作)纔會被列出來。
-e :直接在命令列模式上進行 sed 的動作編輯;
-f :直接將 sed 的動作寫在一個文件內, -f filename 則可以運行 filename 內的 sed 動作;
-r :sed 的動作支持的是延伸型正規表示法的語法。(默認是基礎正規表示法語法)
-i :直接修改讀取的文件內容,而不是輸出到終端。

動作說明: [n1[,n2]]function
n1, n2 :不見得會存在,一般代表『選擇進行動作的行數』,舉例來說,如果我的動作是需要在 1020 行之間進行的,則『 10,20[動作行爲] 』

function:
a :新增, a 的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
c :取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行!
d :刪除,因爲是刪除啊,所以 d 後面通常不接任何咚咚;
i :插入, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行);
p :列印,亦即將某個選擇的數據印出。通常 p 會與參數 sed -n 一起運行~
s :取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配正規表示法!例如 1,20s/old/new/g 就是啦!



sed 刪除換行符

sed ':label;N;s/\n/:/;b label' filename
sed ':label;N;s/\n/:/;t label' filename

 

上面的兩條命令可以實現將文件中的所有換行符替換爲指定的字串,如命令中的冒號。命令的解釋:

  • :label;  這是一個標籤,用來實現跳轉處理,名字可以隨便取(label),後面的b label就是跳轉指令
  • N;  N是sed的一個處理命令,追加文本流中的下一行到模式空間進行合併處理,因此是換行符可見
  • s/\n/:/;   s是sed的替換命令,將換行符替換爲冒號
  • b label  或者 t label    b / t 是sed的跳轉命令,跳轉到指定的標籤處

標籤跳轉和N的追加命令實現了每一行的不間斷放入模式處理空間,從而不會漏掉每一個換行符,而沒有標籤的話跳轉的話,就只能每兩行替換掉一個換行符,對比效果:

echo "a,b,c,d" |sed 's/,/\n/g'|sed ':x;N;s/\n/,/;b x'

echo "a,b,c,d" |sed 's/,/\n/g'|sed 'N;s/\n/,/'

sed  -n '/Region/p'  source.json | sed 's/^\s*"\w*"://' | sed 's/"},//'|sed 's/"}]//'|sed 's/"//'|sed 'N;s/,\n/\t/'




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章