sed命令n,N,d,D,p,P,h,H,g,G,x解析

sed命令n,N,d,D,p,P,h,H,g,G,x解析

一、前端

sed執行模板=sed '模式{命令1;命令2}'bash

即逐行讀入模式空間,執行命令,最後輸出打印出來ide

二、spa

爲方便下面,先說下p和P,p打印當前模式空間內容,追加到默認輸出以後,P打印當前模式空間開端至\n的內容,並追加到默認輸出以前。code

sed並不對每行末尾\n進行處理,可是對N命令追加的行間\n進行處理,由於此時sed將兩行看作一行orm

2-一、n命令ci

n命令簡單來講就是提早讀取下一行,覆蓋模型空間前一行(並無刪除,所以依然打印至標準輸出),若是命令未執行成功(並不是跳過:前端條件不匹配),則放棄以後的任何命令,並對新讀取的內容,重頭執行sed。字符串

例子:get

從aaa文件中取出偶數行string

1
2
3
4
5
6
7
8
9
10
cat aaa
This is 1
This is 2
This is 3
This is 4
This is 5
sed -n 'n;p' aaa //-n 表示隱藏默認輸出內容
This is 2
This is 4


註釋:讀取This is 1,執行n命令,此時模式空間爲This is 2,執行p,打印模式空間內容This is 2,以後讀取This is 3,執行n命令,此時模式空間爲This is 4,執行p,打印模式空間內容This is 4,以後讀取This is 5,執行n命令,由於沒有了,因此退出,並放棄p命令。

所以,最終打印出來的就是偶數行。


2-二、N命令

N命令簡單來講就是追加下一行到模式空間,同時將兩行看作一行,可是兩行之間依然含有\n換行符,若是命令未執行成功(並不是跳過:前端條件不匹配),則放棄以後任何命令,並對新讀取的內容,重頭執行sed。

例子:

從aaa文件中讀取奇數行

1
2
3
4
5
6
7
8
9
10
11
cat aaa
This is 1
This is 2
This is 3
This is 4
This is 5
sed -n '$!N;P' aaa
This is 1
This is 3
This is 5

註釋中1表明This is 1 2表明This is 2 以此類推

註釋:讀取1,$!條件知足(不是尾行),執行N命令,得出1\n2,執行P,打印得1,讀取3,$!條件知足(不是尾行),執行N命令,得出3\n4,執行P,打印得3,讀取5,$!條件不知足,跳過N,執行P,打印得5


2-三、d命令

d命令是刪除當前模式空間內容(不在傳至標準輸出),並放棄以後的命令,並對新讀取的內容,重頭執行sed。

d命令例子

從aaa文件中取出奇數行

1
2
3
4
5
6
7
8
9
10
11
cat aaa
This is 1
This is 2
This is 3
This is 4
This is 5
sed 'n;d' aaa
This is 1
This is 3
This is 5

註釋:讀取1,執行n,得出2,執行d,刪除2,得空,以此類推,讀取3,執行n,得出4,執行d,刪除4,得空,可是讀取5時,由於n沒法執行,因此d不執行。因無-n參數,故輸出1\n3\n5

2-四、D命令

D命令是刪除當前模式空間開端至\n的內容(不在傳至標準輸出),放棄以後的命令,可是對剩餘模式空間從新執行sed。

D命令例子

從aaa文件中讀取最後一行

1
2
3
4
5
6
7
8
9
cat aaa
This is 1
This is 2
This is 3
This is 4
This is 5
sed 'N;D' aaa
This is 5

註釋:讀取1,執行N,得出1\n2,執行D,得出2,執行N,得出2\n3,執行D,得出3,依此類推,得出5,執行N,條件失敗退出,因無-n參數,故輸出5


2-五、y命令

y命令的做用在於字符轉換

y命令例子:

將aaa文件內容大寫

1
2
3
4
5
6
sed 'y/his/HIS/' aaa
THIS IS 1
THIS IS 2
THIS IS 3
THIS IS 4
THIS IS 5

此外,若是須要對某個字符串進行大小寫轉換,則可以使用以下方法

1
2
3
4
5
6
7
8
9
10
11
12
13
cat ddd
This is a and a is 1
This is b and b is 2
This is c and c is 3
This is d and d is 4
This is e and e is 5
sed 's/\b[a-z]\b/\u&/g' ddd
This is A and A is 1
This is B and B is 2
This is C and C is 3
This is D and D is 4
This is E and E is 5

2-六、h命令,H命令,g命令,G命令

h命令是將當前模式空間中內容覆蓋至保持空間,H命令是將當前模式空間中的內容追加至保持空間

g命令是將當前保持空間中內容覆蓋至模式空間,G命令是將當前保持空間中的內容追加至模式空間

命令例子:

將ddd文件中數字和字母互換,並將字母大寫

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cat ddd. sed
h
{
s/.*is \(.*\) and .*/\1/
y /abcde/ABCDE/
G
s/\(.*\)\n\(.*is \).*\(and \).*\(is \)\(.*\)/\2\5 \3\5 \4\1/
}
sed -f ddd. sed ddd
This is 1 and 1 is A
This is 2 and 2 is B
This is 3 and 3 is C
This is 4 and 4 is D
This is 5 and 5 is E

註釋:讀取1,執行h,複製到保持空間,執行s,模式空間獲得匹配到的字母a,而後執行y,將a轉成A,執行G,追加保持空間內容到模式空間,得

A\nThis is a and a is 1;執行s,從新排列,得出This is 1 and 1 is A;以此類推,得出結果。

這裏須要注意的是匹配的內容中,空格必定要處理好,空格處理不對,會形成第二次s匹配錯誤,沒法執行從新排列或排列錯誤

2-七、x命令

x命令是將當前保持空間和模式空間內容互換


轉來只是爲了保存而以

原文地址:http://hi.baidu.com/aaa103439/item/dbaa6d0d27b4f812cc34eab8

相關文章
相關標籤/搜索