首頁 > 運維 > linux運維 > 主體

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

藏色散人
發布: 2021-11-15 15:55:00
轉載
2500 人瀏覽過

總結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.
登入後複製

以上是總結linux中sed指令的使用方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:juejin.im
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板