sed命令和正規表示式

2021-09-24 17:48:28 字數 3392 閱讀 3916

sed命令:

告訴sed對指定行進行何種操作

命令    功能

a 在當前行後新增一行或多行

c 用新文字修改(替換)當前行中的文字

d 刪除行

i 在當前行之前插入文字

l 列出非列印字元

p 列印行

n 讀入下一輸入行,並從下一條命令而不是第一條命令處理

q 結束或退出sed

! 取反

s 用乙個字串替換另乙個字串

s 替換標識

g 全域性替換

i 忽略大小寫

r 從檔案中讀

w 將行寫入檔案

y 將字元轉換成另一字元(不支援正規表示式)

h 把模式空間裡的內容複製到暫存緩衝區

選項

選項 功能

-e      允許多項編輯

-f 指定sed指令碼檔名

-n 取消預設的輸出

-i inplace 直接修改

-r 支援擴充套件元字元

示例:

head -10 /etc/passwd > passwd       #取/etc/passwd做演示

# sed '' passwd (這裡將passwd中的內容放到模式空間處理,因為沒有執行任何命令,所以原封不動的返回值)

# sed 'd' passwd (讀到每一行都執行刪除的操作,所以不返回任何值)

# sed '1,9d' passwd (讀1-9行的內容,然後刪除,最後輸出的就只剩第十行)

# sed -r 'p' passwd (內容會重複兩次,因為到模式空間處來會列印一次。然後print會再列印一次)

# sed -rn 'p' passwd (以靜默的方式顯示,進入模式空間被命令處理過的可以輸出,原先內容就不輸出)

# sed -rn '/root/p' passwd (列印帶root的行)

# sed -rn '/^[rot]/p' passwd (列印包含r,o,t開頭的行)

# sed -rn '/^[^root}/p' passwd (列印不包含以r,o,t開頭的行)

# sed -r 's/root/alice/' passwd (替換root為alice,只替換了每行第乙個)

# sed -r 』s/root/alice/g『 passwd (全域性替換,都改)

# sed -r 's#/sbin/nologin#/bin/ok#' passwd (使用#號或者@也可以,一般是帶有/的 替換目錄之類的操作,看起來更清晰)

sed常用命令例項:

替換命令s

擴充套件: ^$代表空行   空格直接敲就行  \t代表tab鍵(製表符)

[root@localhost ~]# sed -r 's/root/alice/' passwd #替換每行第乙個root為alice

[root@localhost ~]# sed -r 's/root/alice/g' passwd #替換每行root為alice

[root@localhost ~]# sed -r '1s/root/alice/g' passwd #只替換第一行的root為alice,想替換幾行可以換成1,ns即可

[root@localhost ~]# sed -ri 's/(^[sl])/#\1/' passwd #將以s或者l開頭的行作為乙個組,替換時在前面加#,\1是呼叫前面組的內容

[root@localhost ~]# sed -r 's/^#//' passwd #將以#開頭的行去掉#號

[root@localhost ~]# sed -r 's/^[ |\t|#]*$/test/' passwd #以空格或tab或#號或空行開頭的行,替換為為test

[root@localhost ~]# sed -r 's#/var#/opt#' passwd #這裡替換乙個目錄帶/,那麼可以將替換的/換成#,看起來更清晰

追加命令a

#變數var=666666

#使用a追加變數的時候使用雙引號,而不是單引號,單引號強引用,會去掉$var原本的含義,而不是我們的變數

[root@localhost ~]# sed -ri '1a test1' passwd #在第一行後追加test1

[root@localhost ~]# sed -ri '$a test$' passwd #在最後一行追加test$

[root@localhost ~]# sed -ri '1,4a test$' passwd #在1-4行後追加test$

[root@localhost ~]# sed -ri "2a $var" passwd #在第二行後追加$var

[root@localhost ~]# sed -ri "\$a $var" passwd #在最後一行追加$var,加\是為了轉義,讓$a就是最後一行的意思

替換命令c

#與s替換大同小異,用新文字修改(替換)當前行中的文字,但這種替換需要準確內容,只有要相同的內容就統統改

[root@localhost ~]# sed -ri '/6666/c7777' passwd #替換6666為7777

[root@localhost ~]# sed -ri '/usedns no/cusedns yes' sshd_config #將usedns no替換為usedns yes

刪除命令d

[root@localhost ~]# sed -ri '1d' passwd        #刪除第一行

[root@localhost ~]# sed -ri '1,5d' passwd #刪除1,5行

[root@localhost ~]# sed -ri '/^#/d' passwd #刪除以#號開頭的行

[root@localhost ~]# sed -ri '/^[ |\t|#]*$/d' passwd #刪除帶有空格,tab,#,空行開頭的行

小擴充套件:sed選項-e

#一條sed語句中有多個命令的時候需要加-e,也可以用分號代替

[root@localhost ~]# sed -ri -e '3,5d' -e 's/root/alice/' passwd

[root@localhost ~]# sed -ri 's/root/alice/;3,5d' passwd

sed命令和正規表示式

sed命令 告訴sed對指定行進行何種操作 命令 功能 a 在當前行後新增一行或多行 c 用新文字修改 替換 當前行中的文字 d 刪除行 i 在當前行之前插入文字 l 列出非列印字元 p 列印行 n 讀入下一輸入行,並從下一條命令而不是第一條命令處理 q 結束或退出sed 取反 s 用乙個字串替換另...

sed 正規表示式

如果testfile的內容是 welcome to the world of regexp 現在要去掉所有的html標籤,使輸出結果為 hello world welcome to the world of regexp 怎麼做呢?如果用下面的命令 sed s g testfile 結果是兩個空行,...

sed 常用正規表示式

1.乙個比較實用的正規表示式 匹配html的嵌入 匹配 的嵌入碼 刪除僅由空字元組成的行 sed space d filename 匹配html標籤 例如 從html檔案中剔除html標籤 sed s g space d file.html 例如 要從下列 中去除 及其中包括的 b 4c6c2a65...