關於sed 至少要掌握這些

sed-最常用基礎知識

基本語法/格式

sed -option 'command script' file

# -option並不總是需要
sed 'command script' file

其中要特別注意 -i選項,沒有帶-i選項都只是對出力結果的處理,並沒有直接編輯原文件。

# 直接編輯原文件
sed -i 'command script' file.txt

# 沒有-i,不會影響原文件
sed 'command script' file.txt
# 有需要可以另存輸出結果
sed 'command script' file.txt > file1.txt

有時也許你會發現,例如像sed -s/cat/dog/ file.txt 這樣不加引號的命令也能執行,這是因爲這個命令中剛好沒有空格,雖然偶爾能成功但不適用於大部分命令帶空格的情況,所以還是要養成好習慣,給命令加上單引號。

一些常見的option參考

短option (-) 長option (- -) 內容 注意
-f –file -f後面跟內容爲執行命令的文件,表示執行文件中的命令
-e script –expression=script 添加執行的命令,通過並列多個-e script可一次執行多個命令
-i –in-place 直接編輯文件
-i後綴詞 –in-place=後綴詞 直接編輯文件同時,生成加上指定後綴的原文件備份。例,-i.bak 會將原文件備份爲test.txt.bak 。 注意-i和後綴詞之間沒有空格。
-n –quiet,–silent 不打印 命令所涉及行 以外的行 (只打印受影響的行)

執行sed命令文件

就像上面option參考表格中寫到,-f是使用命令文件的選項,-f後面要跟一個寫好命令的文件。

語法

# scriptfile是寫有命令的文件,file是被命令操作的文件對象
sed -f scriptfile file

例,

$ cat copy.txt 
cat cat
cat cat

#  command.txt 的內容爲將第一行的cat換爲dog的命令
$ cat command.txt 
1s/cat/dog/g

# 執行這個文件裏的命令(並沒有對原文件進行直接編輯)
$ sed -f command.txt copy.txt 
dog dog
cat cat

字符串的替換

關於字符串替換的內容,總結在這篇博客文章裏了。
sed 字符串替換 csdn文章鏈接

輸出指定的行

話題相關
這個操作可以回答如下問題
#linux 如何輸出文件指定行
#shell 如何輸出文件指定行
#sed 輸出文件指定行

語法

# 打印第5行
sed -n '5p' file

-n,上面option參考表格中也介紹了,在sed後面加 -n,是阻止默認的自動打印模式的選項;
p,同時在行號後寫p,表明打印print/輸出。

具體來說,

# 打印輸出第5行
sed -n '5p' test.txt
# 打印輸出第3,4行
sed -n '3,4p' test.txt

# 除去第5行,打印輸出
sed -n '5!p' test.txt
# 除去第3,4行,打印輸出
sed -n '3,4!p' test.txt

# 輸出含有hello的行
sed -n '/hello/p' test.txt
# 輸出 除了含有hello的行
sed -n '/hello/!p' test.txt

其中,sed -n ‘5!p’ test.txt 與接下來要說的刪除指定行d命令的 sed ‘5d’ test.txt是同效果的。

使用正則表達式

語法

# 用逗號隔開選定範圍的開始與結束
sed -n '/cat/,/dog/p' test.txt

意爲,打印從含有第一個含有cat的行開始,到第一個含有dog的行。

添加插入文本

關於用sed添加插入文本的內容,總結在這篇博客文章裏了。
sed 插入文本 csdn文章鏈接

刪除指定行

話題相關
這個操作可以回答如下問題
#linux 如何刪除文件指定行
#shell 如何刪除文件指定行
#sed 刪除文件指定行

語法
d來表示刪除

# 刪除原文件第2行後輸出(並沒有對原文件進行直接編輯)
sed '2d' file 

具體來說,

# 輸出除了第二行以外的行
sed '2d' test.txt

# 刪除第3行到第5行
sed '3,5d' test.txt

# 刪除第3行到最後一行以後輸出 $爲最後一行
sed '3,$d' test.txt

# 只輸出第3行;以下兩個寫法等效
sed '3!d' test.txt
sed -n '3p' test.txt

# 刪除含有hello的行
sed '/hello/d' test.txt

# 刪除 除了含有hello的行
sed '/hello/!d' test.txt

# 刪除第1行,且刪除第3行到最後一行以後輸出; 以下兩個寫法等效
sed '1d;3,$d' test.txt 

sed -e '1d' -e '3,$d' test.txt 

退出/停止

話題相關
這個q命令操作可以回答如下問題
#linux 如何打印文檔前10行
#shell 如何只輸出文件前10行

語法
退出sed,用q命令

# 打印到第10行,停止;即打印前10行
sed '10q' file

# 與正則表達式結合
# 打印到第一個abc所在的行,停止
sed '/abc/q' file

(以上。)

發佈了34 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章