shell程式設計 流編輯sed(二)

2021-08-21 02:34:29 字數 1798 閱讀 8685

1    sed編輯命令基本語法

[address1[,address2]] command [argument]

address1與address2為位置引數

若沒有位置引數則對指定檔案中的所有文字執行編輯操作

2    選擇文字

[address1[,address2]] p

子命令p表示將緩衝區中的文字執行輸出操作,即列印(print)緩衝區中的文字

sed -n '1,3p' students.txt    //輸出1~3行,使用-n選項

sed -n '/^20020017/ p' students.txt  //使用正規表示式作為定位引數

sed -n '1 p' students.txt  //輸出第一行

sed -n '$ p' students.txt  //輸出最後一行

sed -n '1~2 p' students.txt  //輸出奇數行

sed -n '/abdul/,5 p' students.txt  //使用行號和正規表示式

3    替換文字

使用sed命令可以很方便地對文字檔案中指定的文字進行替換操作

s/pattern/replacemen/[flag]

pattern為使用正規表示式表示的匹配模式

replacement為用來替換的由一般字元組成的字串

flag為替換標誌:

g:全域性替換,替換文字行中所有符合規則的字串

p:替換第1個符合規則的字串,並將緩衝區輸出到標準輸出

w:替換第1個符合規則的字串,並且將受影響的行輸出到磁碟檔案中

空:表示替換文字行中第1個符合規則的字串

十進位制:表示替換文字行中第n個符合規則的字串

eg.sed 's/e/e/' students.txt

sed 's/e/e/g' students.txt

sed '1,3 s/e/e/g' students.txt  //  新增位置引數,替換1~3行中的所有的小寫字母e

注:在s命令中,各個引數之間並不一定要使用斜線分隔,還可以使用除空格以及換行符之外的其他任意的字元,例如冒號或者分號等。總之,s命令會將緊緊跟在後面的那個字元作為引數分隔符。

如果替換符中含有字元&,表示引用匹配的模式,即在某個文字行中與模式相匹配的那部分子串。

sed 's/string/long string &/' demo.txt

\n表示第n個由圓括號括起來的子串,n屬於1~9

sed 's/\(this\)\(is\)\(a\)\(string\)/\2\1\3\4/' demo.txt

輸出:is this a string

4    刪除子串

[address1[,address2]] d

如果省略位置引數,則表示刪除文字檔案中的所有行

sed '1 d' students.txt  //刪除第1行

sed '$ d' students.txt  //刪除最後1行

sed -e '1,4 d' students.txt

sed -e '0~2 d' students.txt

sed '^$ d' students.txt  //刪除所有空白行(正規表示式)

5    追加文字

所謂追加文字,是指將某些文字插入到某個位置後面

[address1] a string

sed '2 a 200200109 tom' students.txt  //在第二行後面追加一行文字

6    插入文字

與追加文字相似,追加在指定位置的後面插入文字,插入文字則是在位置引數的前面插入文字。

shell指令碼 sed流編輯器

sed n pattern command file n 顯示pattern查詢出的匹配行 不加 n會顯示原來的行與匹配的行 e 直接在命令列進行sed編輯 sed n e aaaaa p e aaaa p file p是列印的意思 f 有時上文中紅色的長度過長 可以把上文紅色放在檔案file1中 ...

Shell中的流編輯器sed

sed編輯器被稱作流編輯器 stream editor 和普通的互動式文字編輯器恰好相反。在互動式文字編輯器中 比如vim 你可以用鍵盤命令來互動式地插入 刪除或替換資料中的文字。流編輯器則會在編輯器處理資料之前基於預先提供的一組規則來編輯資料流。sed options command file s...

sed 流編輯命令

sed 1,2d hosts 刪除第一行第二行 原檔案不變 sed i 1,2d hosts sed d hosts 刪除最後一行 sed s local local g hosts local 替換成 local sed 1 i000000 hosts key i上一行新增str sed 1 a0...