日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux-sed文本处理流编辑器

發布時間:2025/3/21 linux 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux-sed文本处理流编辑器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

Linux sed命令是利用script來處理文本文件。

sed可依照script的指令,來處理、編輯文本文件。

Sed主要用來自動編輯一個或多個文件;簡化對文件的反復操作;編寫轉換程序等。


語法

sed [-hnV][-e<script>][-f<script文件>][文本文件]

參數說明:

  • -e<script>或–expression=<script> 以選項中指定的script來處理輸入的文本文件。
  • -f<script文件>或–file=<script文件> 以選項中指定的script文件來處理輸入的文本文件。
  • -h或–help 顯示幫助。
  • -n或–quiet或–silent 僅顯示script處理后的結果。
  • -V或–version 顯示版本信息。

動作說明:

  • a :新增, a 的后面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
  • c :取代, c 的后面可以接字串,這些字串可以取代 n1,n2 之間的行!
  • d :刪除,因為是刪除,所以 d 后面通常不接任何內容;
  • i :插入, i 的后面可以接字串,而這些字串會在新的一行出現(目前的上一行);
  • p :列印,亦即將某個選擇的數據印出。通常 p 會與參數 sed -n 一起運行~
  • s :取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配正規表示法!例如 1,20s/old/new/g 就是了!

栗子

[root@entel2 ~]# cat sedTest.txt xiao gong jiang1 xiao gong jiang2 xiao gong jiang3 xiao gong jiang4 xiao gong jiang5 xiao gong jiang6 xiao gong jiang7 xiao gong jiang8 xiao gong jiang9 xiao gong jiang10 xiao gong jiang11 xiao gong jiang12 xiao gong jiang13 xiao gong jiang14 xiao gong jiang15

以下例子中的數據均已上述sedTest.txt為準

在文件的第四行后添加一行,并將結果輸出到標準輸出

[root@entel2 ~]# sed -e 4a\Line4 sedTest.txt xiao gong jiang1 xiao gong jiang2 xiao gong jiang3 xiao gong jiang4 Line4 xiao gong jiang5 xiao gong jiang6 xiao gong jiang7 xiao gong jiang8 xiao gong jiang9 xiao gong jiang10 xiao gong jiang11 xiao gong jiang12 xiao gong jiang13 xiao gong jiang14 xiao gong jiang15

并不會修改源文件


以行為單位的新增/刪除

刪除第二行到第五行

[root@entel2 ~]# cat -b sedTest.txt | sed '2,5d'1 xiao gong jiang1 6 xiao gong jiang6 7 xiao gong jiang7 8 xiao gong jiang8 9 xiao gong jiang9 10 xiao gong jiang10 11 xiao gong jiang11 12 xiao gong jiang12 13 xiao gong jiang13 14 xiao gong jiang14 15 xiao gong jiang15 [root@entel2 ~]# nl sedTest.txt |sed '2,5d'1 xiao gong jiang1 6 xiao gong jiang6 7 xiao gong jiang7 8 xiao gong jiang8 9 xiao gong jiang9 10 xiao gong jiang10 11 xiao gong jiang11 12 xiao gong jiang12 13 xiao gong jiang13 14 xiao gong jiang14 15 xiao gong jiang15

sed 的動作為 ‘2,5d’ ,那個 d 就是刪除!
因為 2-5 行給他刪除了,所以顯示的數據就沒有 2-5 行羅~

另外,注意一下,原本應該是要下達 sed -e 才對,沒有 -e 也可以!

[root@entel2 ~]# nl sedTest.txt | sed -e '2,9d'1 xiao gong jiang1 10 xiao gong jiang10 11 xiao gong jiang11 12 xiao gong jiang12 13 xiao gong jiang13 14 xiao gong jiang14 15 xiao gong jiang15

同時也要注意的是, sed 后面接的動作,推薦使用 ” 兩個單引號括住!

只刪除某一行

比如第二行

[root@entel2 ~]# nl sedTest.txt | sed '2d'1 xiao gong jiang1 3 xiao gong jiang3 4 xiao gong jiang4 5 xiao gong jiang5 6 xiao gong jiang6 7 xiao gong jiang7 8 xiao gong jiang8 9 xiao gong jiang9 10 xiao gong jiang10 11 xiao gong jiang11 12 xiao gong jiang12 13 xiao gong jiang13 14 xiao gong jiang14 15 xiao gong jiang15

刪除第 3 到最后一行

[root@entel2 ~]# nl sedTest.txt | sed -e '3,$d'1 xiao gong jiang1 2 xiao gong jiang2

$ 標識最后一行

在第二行后(亦即是加在第三行)增加內容

[root@entel2 ~]# nl sedTest.txt | sed '2a this is added by sed'1 xiao gong jiang1 2 xiao gong jiang2 this is added by sed3 xiao gong jiang3 4 xiao gong jiang4 5 xiao gong jiang5 6 xiao gong jiang6 7 xiao gong jiang7 8 xiao gong jiang8 9 xiao gong jiang9 10 xiao gong jiang10 11 xiao gong jiang11 12 xiao gong jiang12 13 xiao gong jiang13 14 xiao gong jiang14 15 xiao gong jiang15

在第二行前(亦即是加在第二行)增加內容

[root@entel2 ~]# nl sedTest.txt | sed '2i this is added by sed'1 xiao gong jiang1 this is added by sed2 xiao gong jiang2 3 xiao gong jiang3 4 xiao gong jiang4 5 xiao gong jiang5 6 xiao gong jiang6 7 xiao gong jiang7 8 xiao gong jiang8 9 xiao gong jiang9 10 xiao gong jiang10 11 xiao gong jiang11 12 xiao gong jiang12 13 xiao gong jiang13 14 xiao gong jiang14 15 xiao gong jiang15

增加兩行以上,在第二行后面加入兩行字

[root@entel2 ~]# nl sedTest.txt | sed '2i this is added by sed \n and I am the sencond line '1 xiao gong jiang1 this is added by sed and I am the sencond line 2 xiao gong jiang2 3 xiao gong jiang3 4 xiao gong jiang4 5 xiao gong jiang5 6 xiao gong jiang6 7 xiao gong jiang7 8 xiao gong jiang8 9 xiao gong jiang9 10 xiao gong jiang10 11 xiao gong jiang11 12 xiao gong jiang12 13 xiao gong jiang13 14 xiao gong jiang14 15 xiao gong jiang15

或者

[root@entel2 ~]# nl sedTest.txt | sed '2a run or \ > walk '1 xiao gong jiang1 2 xiao gong jiang2 run or walk 3 xiao gong jiang3 4 xiao gong jiang4 5 xiao gong jiang5 6 xiao gong jiang6 7 xiao gong jiang7 8 xiao gong jiang8 9 xiao gong jiang9 10 xiao gong jiang10 11 xiao gong jiang11 12 xiao gong jiang12 13 xiao gong jiang13 14 xiao gong jiang14 15 xiao gong jiang15

每一行之間都必須要以反斜杠『 \ 』來進行新行的添加。


以行為單位的替換與顯示

將第2-5行的內容取代成為『a』

[root@entel2 ~]# nl sedTest.txt |sed '2,5c a'1 xiao gong jiang1 a6 xiao gong jiang6 7 xiao gong jiang7 8 xiao gong jiang8 9 xiao gong jiang9 10 xiao gong jiang10 11 xiao gong jiang11 12 xiao gong jiang12 13 xiao gong jiang13 14 xiao gong jiang14 15 xiao gong jiang15 [root@entel2 ~]# nl sedTest.txt |sed -e '2,5c a'1 xiao gong jiang1 a6 xiao gong jiang6 7 xiao gong jiang7 8 xiao gong jiang8 9 xiao gong jiang9 10 xiao gong jiang10 11 xiao gong jiang11 12 xiao gong jiang12 13 xiao gong jiang13 14 xiao gong jiang14 15 xiao gong jiang15

通過這個方法可以取代整行。

僅列出文件內的第 5-7 行

[root@entel2 ~]# nl sedTest.txt | sed -n '5,7p'5 xiao gong jiang5 6 xiao gong jiang6 7 xiao gong jiang7

p :列印,亦即將某個選擇的數據印出。通常 p 會與參數 sed -n 一起運行~

-n或–quiet或–silent 僅顯示script處理后的結果。如果不加 -n ,會把所有行和匹配行都輸出。

數據的搜尋并顯示

搜索jiang1關鍵字的行

[root@entel2 ~]# sed -n '/jiang1/p' sedTest.txt xiao gong jiang1 xiao gong jiang10 xiao gong jiang11 xiao gong jiang12 xiao gong jiang13 xiao gong jiang14 xiao gong jiang15

關鍵字需要用 /關鍵字/

p :列印,亦即將某個選擇的數據印出。通常 p 會與參數 sed -n 一起運行~

如果jiang1找到,除了輸出所有行,還會輸出匹配行。
使用-n的時候將只打印包含模板的行。

如果不指定 -n ,如下:

[root@entel2 ~]# sed '/jiang1/p' sedTest.txt xiao gong jiang1 xiao gong jiang1 xiao gong jiang2 xiao gong jiang3 xiao gong jiang4 xiao gong jiang5 xiao gong jiang6 xiao gong jiang7 xiao gong jiang8 xiao gong jiang9 xiao gong jiang10 xiao gong jiang10 xiao gong jiang11 xiao gong jiang11 xiao gong jiang12 xiao gong jiang12 xiao gong jiang13 xiao gong jiang13 xiao gong jiang14 xiao gong jiang14 xiao gong jiang15 xiao gong jiang15

數據的搜尋并刪除

刪除所有包含jiang1的行,其他行輸出

[root@entel2 ~]# nl sedTest.txt|sed '/jiang1/d' 2 xiao gong jiang2 3 xiao gong jiang3 4 xiao gong jiang4 5 xiao gong jiang5 6 xiao gong jiang6 7 xiao gong jiang7 8 xiao gong jiang8 9 xiao gong jiang9

數據的搜尋并執行命令

改造下數據:

將/etc/passwd root開頭的打印出來 追加到 sedTest.txt文本中。

[root@entel2 ~]# sed -n '/^root/p' /etc/passwd >> sedTest.txt [root@entel2 ~]# cat sedTest.txt xiao gong jiang1 xiao gong jiang2 xiao gong jiang3 xiao gong jiang4 xiao gong jiang5 xiao gong jiang6 xiao gong jiang7 xiao gong jiang8 xiao gong jiang9 xiao gong jiang10 xiao gong jiang11 xiao gong jiang12 xiao gong jiang13 xiao gong jiang14 xiao gong jiang15 root:x:0:0:root:/root:/bin/bash

把 bash 改成 xiaogongjiang

[root@entel2 ~]# sed -n '/root/{s/bash/xiaogongjiang/;p}' sedTest.txt root:x:0:0:root:/root:/bin/xiaogongjiang

數據的搜尋并替換

除了整行的處理模式之外, sed 還可以用行為單位進行部分數據的搜尋并取代。基本上 sed 的搜尋與替代的與 vi 相當的類似!他有點像這樣:

sed 's/要被取代的字串/新的字串/g'

字符g代表每行出現的字符全部替換,如果想在特定字符處添加,g就有用了,否則只會替換每行第一個,而不繼續往后找了.

栗子

獲取etho0的網址信息

[root@entel2 ~]# ifconfig eth0 | grep "inet addr"inet addr:10.45.7.122 Bcast:10.45.17.255 Mask:255.255.252.0

利用正則去掉ip前面的部分

[root@entel2 ~]# ifconfig eth0 | grep "inet addr" | sed 's/^.*addr://g' 10.45.7.122 Bcast:10.45.17.255 Mask:255.255.252.0

去掉ip后面部分

[root@entel2 ~]# ifconfig eth0 | grep "inet addr" | sed 's/^.*addr://g' | sed 's/Bcast.*$//g' 10.45.7.122

講解:

^ 匹配行首 例如 ^hello 會匹配以hello開頭的行 . 匹配除了換行符外任意一個字符 * 前一個字符匹配0次或任意多次 $ 匹配行尾 例如 hello$ 會匹配以hello結尾的行

多點編輯

一條sed命令,刪除/etc/passwd第三行到末尾的數據,并把bash替換為blueshell

[root@entel2 ~]# nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/g'1 root:x:0:0:root:/root:/bin/blueshell2 bin:x:1:1:bin:/bin:/sbin/nologin

-e表示多點編輯,第一個編輯命令刪除/etc/passwd第三行到末尾的數據,第二條命令搜索bash替換為blueshell。


直接修改文件內容(危險動作)

sed 可以直接修改文件的內容,不必使用管道命令或數據流重導向! 不過,由於這個動作會直接修改到原始的文件,所以請你千萬不要隨便拿系統配置來測試!

我們還是使用我們的 sedTest.txt來測試吧

利用 sed 直接在 sedTest.txt 最后一行加入『# This is a test』

[root@entel2 ~]# sed -i '$a This is for test ' sedTest.txt [root@entel2 ~]# cat sedTest.txt xiao gong jiang1 xiao gong jiang2 xiao gong jiang3 xiao gong jiang4 xiao gong jiang5 xiao gong jiang6 xiao gong jiang7 xiao gong jiang8 xiao gong jiang9 xiao gong jiang10 xiao gong jiang11 xiao gong jiang12 xiao gong jiang13 xiao gong jiang14 xiao gong jiang15 root:x:0:0:root:/root:/bin/bash This is for test

由於 $ 代表的是最后一行,而 a 的動作是新增,因此該文件最后新增『# This is a test』!

每一行結尾若為 . 則換成 !

sed -i 's/\.$/\!/g' regular_express.txt

在每行的頭添加字符,比如”HEAD”

sed 's/^/HEAD&/g' test.file

在每行的行尾添加字符,比如“TAIL”

sed 's/$/&TAIL/g' test.file

如果想導出文件,就利用重定向;如果想在原文件上更改,添加選項”-i”。

sed 的『 -i 』選項可以直接修改文件內容,這功能非常有幫助!舉例來說,如果你有一個 100 萬行的文件,你要在第 100 行加某些文字,此時使用 vim 可能會瘋掉!因為文件太大了!那怎辦?就利用 sed 啊!透過 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修訂!

總結

以上是生活随笔為你收集整理的Linux-sed文本处理流编辑器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。