總結linux中sed命令的使用方法

總結linux中sed命令的使用方法

linux之sed命令:

1 初識sed

sed編輯器被稱作流編輯器,它和vim這種的交互式文本編輯器不同,是根據命令來處理數據流中的數據。會執行下列操作:

  • 一次從輸入中讀取一行數據(重復該操作直到全部行被讀取完)

  • 根據編輯器命令匹配數據

  • 按照命令修改數據流中的數據

  • 將新數據輸出到STDOUT(標準輸出)

其中sed命令的可以從命令行中輸入,也可以從一個命令文件中讀取。

sed?-e?script?添加script中指定的命令 sed?-f?file?添加file中指定的命令

1.1 在命令行定義sed命令【推薦學習:linux視頻教程

來看一個簡單的文本替換示例:

echo?"hi,my?name?is?xxx"?|?sed?'s/xxx/kinsomy/' #修改文件 sed?'s/xxx/kinsomy/'?data.txt #執行多個命令?用-e選項,分號隔開 sed?'s/xxx/kinsomy/;?s/***/hhh/'?data.txt

將echo輸出的數據通過管道輸入sed中,然后用s命令進行替換,用第二個斜杠后的數據替換掉第一個斜杠后匹配的數據。

注意:sed操作文本文件中的數據,僅僅是將修改的數據輸出到STDOUT,但是并不會修改文件本身的數據

1.2 從文件讀取命令

在一個文件script.sed中定義一系列的命令,方便復用。

s/*/a s/x/b s/-/+
#?-f選項指定命令文件 sed?-f?script.sed?data.txt

2 sed基礎

2.1替換標記

上面的例子echo “hi,my name is xxx” | sed ‘s/xxx/kinsomy/’只會替換每一行中匹配到的第一個數據,但是一行數據中若有多個匹配項,則不能全部被替換掉。

echo?"hi,my?name?is?xxx,?i?am?xxx"?|?sed?'s/xxx/kinsomy/' #輸出 hi,my?name?is?kinsomy,?i?am?xxx

這個時候可以使用一些替換標記substitution flag來設置替換的模式。替換標記跟在替換字符串之后。

s/pattern/replacement/flags

數字,表示將替換掉第幾處被匹配到的數據

echo?"hi,my?name?is?xxx,?i?am?xxx"?|?sed?'s/xxx/kinsomy/2' #輸出?第二個xxx被替換成kinsomy hi,my?name?is?xxx,?i?am?kinsomy

g,表示替換所有匹配到的數據

echo?"hi,my?name?is?xxx,?i?am?xxx"?|?sed?'s/xxx/kinsomy/g' #輸出?第二個xxx被替換成kinsomy hi,my?name?is?kinsomy,?i?am?kinsomy

p,表示會打印出被匹配出來的行

echo?"hi,my?name?is?xxx,?i?am?xxx"?|?sed?'s/xxx/kinsomy/p' #輸出 hi,my?name?is?kinsomy,?i?am?xxx hi,my?name?is?kinsomy,?i?am?xxx
w,將替換后輸出保存到指定文件 echo?"hi,my?name?is?xxx,?i?am?xxx"?|?sed?'s/xxx/kinsomy/w?output.txt'

2.3 行尋址

上文說到sed命令是一行行讀取文本,進行匹配操作數據,知道所有行被遍歷完,如果這時候我們想要對特定的行做操作就要使用行尋址。 行尋址有兩種形式:

數字形式表示行

#?操作單行 $?sed?'2s/xxx/***/'?data.txt #?操作一定行區間[2,4] $?sed?'2,4s/xxx/***/'?data.txt #?操作某行開始到最后[2,endline] $?sed?'2,$s/xxx/***/'?data.txt

文本模式過濾器

首先在/etc/passwd內找到kinsomy的記錄,然后將bash替換為csh。文本模式過濾器配合正則表達式會很強大。

sed?'/kinsomy/s/bash/csh/'?/etc/passwd

2.4 刪除行

使用刪除命令d對文本進行刪除操作。

#?刪除所有文本 sed?'d'?data.txt #?刪除單行 sed?'2d'?data.txt #?刪除行區間[2,3] sed?'2,3d'?data.txt #?刪除行區間[2,endline] sed?'2,$d'?data.txt #?刪除匹配文本aa的行 sed?'/aa/d'?data.txt #?刪除兩個匹配文本之間的文本?匹配到1和3的行之間的文本全部被刪除 sed?'/1/,/3/d'?data.txt

2.5 插入、附加文本

插入命令i在指定行前增加新行

附加命令a在指定行后增加新行

#?追加 echo?"Line?2"?|?sed?'a pipe?quote>?Line?1' #插入 echo?"Line?2"?|?sed?'i pipe?quote>?Line?1'

2.6 修改行

c命令用來修改一行數據

#?修改第三行文本 sed?'3c pipe?quote>?change?line?'?data.txt

2.7 轉換命令

命令格式 sed ‘y/inchar/outchar’

將inchar中的字符一一對應地轉換成outchar的字符

echo?"This?1?is?a?test?of?1?try."?|?sed?'y/123/456/' #?輸出 This?4?is?a?test?of?4?try.

以上就是總結

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享