sed n/N使用說明



sed的語法格式:

sed [option] {sed-command} {input-file}

sed在正常情況下,將處理的行讀入模式空間(pattern space),腳本中的“sed-command(sed命令)”就一條接着一條進行處理,知道腳本執行完畢。然后該行唄輸出,模式(pattern space)被清空;接着,在重復執行剛才的動作,文件中的新的一行被讀入,直到文件處理完畢。

但是,由於種種原因,如用戶希望在某個條件下,腳本中的某個命令被執行或希望模式空間(pattern space)保留,以便下一次使用,這都有可能使sed在處理文件的時候,不按照正常的流程來進行處理,這時候就需要用sed高級命令來滿足需求。

 

先來說說命令n和命令N

命令n:讀取下一行到pattern space。由於pattern space中有按照正常流程讀取的內容,使用n命令后,pattern space中又有了一行,此時,pattern space中有2行內容,但是先讀取的那一行不會被取代、覆蓋或刪除;當n命令后,還有其他命令p的時候,此時打印出的結果是n命令讀取的那一行的內容。

看下圖,你就明白了。

新建文件,其內容如下

cat 1.txt

1

2

正常sed流程

使用n命令后,

N命令:將下一行添加到pattern space中。將當前讀入行和用N命令添加的下一行看成“一行”。

新建文件1.txt

cat 1.txt

1

2

正常sed流程

使用N命令后

=========================================================

2、sed選項
   -n    使用安靜模式.則只有經過sed特殊處理的哪一行才會被列出來
   -e    傳送帶(前面執行完傳遞給后面)
   -f    跟隨腳本文件名
   -r    脫意
   -i    直接修改讀取文件

3、sed命令詳解
   a     新增, a 的后面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
   c     取代, c 的后面可以接字串,這些字串可以取代 n1,n2 之間的行!
   d     刪除,因為是刪除啊,所以 d 后面通常不接任何咚咚;
   i      插入, i 的后面可以接字串,而這些字串會在新的一行出現(目前的上一行);
   p     列印,亦即將某個選擇的資料印出。通常 p 會與參數 sed -n 一起運作~
   s     取代,通常這個 s 的動作可以搭配正規表示法!例如 1,20s/old/new/g 
   n    讀取下一個輸入行, 用下一個命令處理新的行

4、以下是替換標記
  g    表示行內全面替換
  p    表示打印行
  w    表示把行寫入一個文件
  x    表示互換模快板中的文本和緩沖區中的文本
  y    表示把一個字符翻譯為另外的字符(不用於正則表達式)

5、元字符集,匹配符
^       錨定行的開始. 如/^sed/ 匹配所有以sed開頭的行
$       錨定行的結束. 如/sed$/ 匹配所有以sed結尾的行
.         匹配一個非換行符. 如/*sed/ 匹配s后接一個任意字符然后是d
*        匹配零或多個字符. 如/*sed/ 匹配所有模塊是一個或多個空格后緊跟sed的行
[]      匹配一個制定范圍內的字符如. /[Ss]ed/ 匹配sed和Sed
[^]    匹配一個不在制定范圍內的字符. 如/[^A-RT-Z]ed/ 匹配不包含A-R和T-Z的一個字母開頭,緊跟ed的行
\(..\)        保存匹配的字符. 如s/\(love\)able/\1rs loveable被替換成lovers
&              保存搜索字符用來替換其它字符. 如s/love/**&**/ love這成**love**
\<             錨定單詞的開始. 如/\\> 錨定單詞的結束. 如/love\>匹配包含以love結尾的單詞行
x\{m\}       重復字符x,m次. 如/o\{5\}匹配包含5個o的行
x\{m,\}      重復字符x,至少m次. 如 /o\{5,}/匹配至少有5個o的行
x\{m,n\}    重復字符x,至少m次.把多余n次. 如 /o\{5,10\}/匹配5-10個o的行

6、sed中查找模式匹配
.            單字通配符
[0-9]      匹配0-9
[^a-z]    不匹配a-z的所有其它字符
“.*”         匹配””內任何字符串
^            匹配行開始
$            匹配行結束

7、例子
刪除: dd命令
sed ‘2d’ file                 刪除file文件的第2行
sed ‘2,$d’ file             刪除file文件的第2行到末尾所有行
sed ‘$d’ file                刪除file文件的最后一行
sed ‘/test/’d file         刪除file文件所有包含test的行
sed d file                   刪除file文件中的所有行
sed 2,5d file              刪除file中的2-5行
sed /abc/d file          刪除file中包含字符串abc所有的行

替換: s命令
sed ‘s/test/mytest/g’ file        在整行范圍內把test替換為mytest. 如果沒有g標記,則只有每行第一個匹配的test被替換成mytest
sed -n ‘s/^test/mytest/p’ file        -n選項和p標志一起使用表示只打印那些發生替換的行, 如果某一行開頭的test被替換成mytest,就打印它
sed ‘s/^192.168.1.1/&localhost’ file    &符號表示替換字符串中被找到的部分. 所有以192.168.1.1開頭的行都會被替換成它自己加localhost,變成192.168.1.1localhost
sed -n ‘s/\(love\)able/\1rs/p’ file    love被標記為1,所有loveable會被替換成lovers,而且替換的行會被打印出來
sed ‘s#10#100#g’ file            不論什么字符,緊跟着s的命令都被認為是最新的分隔符,所以,’#’在這里是分隔符,代替了默認的”/”分隔符. 表示把所有10替換成100

選定行的范圍: 逗號
sed -n ‘/test/,/check/p’ file        所有在模塊test和check所確定范圍內的行都被打印
sed -n ‘5,/^test/p’ file                 打印從第5行開始到第一個包含以test開始行之間的所有行
sed ‘/test/,/check/s/$/sed test/’ file    對於模塊test和west之間的行,每行的末尾用字符串sed test替換

多點編輯: e命令
sed -e ‘1,5d’ -e ‘s/test/check/’ file    -e選項允許在同一行里執行多條命令.刪除1-5行,check替換test
sed -e ‘/and/s/aaa/bbb’ file           sed中用bbb替換同一行中包括字符串and的字符串aaa,而不是每一行中的字符串aaa

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

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

插入: i命令
sed ‘/test/i\\ new line’ file        如果test被匹配, 則把反斜杠后面的文本插入到匹配行的上面
sed -e ‘1 ia’ -e ‘$ a3′ file             在第一行上面插入a,在末尾行下面插入3

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM