使用場景
sed提供了一種免交互的方式修改文件內(nèi)容。
它是一行一行處理,可以通過正則匹配要修改的部分
基本語法
-
基本語法
sed [-opt] command files(多個文件 空格隔開) -
sed 使用擴(kuò)展正則,不加r不能完全匹配擴(kuò)展正則表達(dá)式
sed -r “正則匹配數(shù)據(jù)行/指定行號 sed命令” files -
sed 修改內(nèi)容寫回文件
默認(rèn),sed操作完的數(shù)據(jù)會顯示在控制臺,而不會回寫到文件中; 若要將變更保存到文件可以使用 -i 選項(xiàng)sed -r -i “/正則表達(dá)式/或者指定行號 + [{]sed命令[}]” files
sed 命令可以使用 {} 括起來,也可以不寫,寫了意思更明確。
如果要對選中的行執(zhí)行多個操作可以使用 分號(;) 隔開 sed命令
sed -r "\regex expression\{s;r}" file
- 行號表示法匹配多行使用逗號分割兩個行號($ 表示最后一行)
# 刪除 1 到 2 行
sed -r "1,2n5n3t3z" file
- sed 命令中引用變量
通常在 單引號’ ’ 內(nèi)使用sed 命令,但單引號 ’ ’ 會將內(nèi)部字符強(qiáng)制轉(zhuǎn)義,使其無法引用到變量。
此時需使用 雙引號 " " 定義sed命令,但此時有可能引發(fā)其他字符需轉(zhuǎn)義,這時需使用反斜杠 \ 單獨(dú)對字符進(jìn)行轉(zhuǎn)義。
# 將最后一行替換為 變量abc的值 123
var abc=123
sed -r "\$ c $123" file
實(shí)例
命令列表
-
d 刪除匹配的行
// 刪除正則匹配的行
sed -r “/正則表達(dá)式/n5n3t3z” file
// 刪除指定行
sed -r “行號n5n3t3z” file- 按正則表達(dá)式刪除
sed -r "/regex expression/d" file
- 刪除第二行
sed -r "2 n5n3t3z" file sed -r "2d" file sed -r "2n5n3t3z" file
- 刪除 2-5行
sed "2,5 n5n3t3z" file sed "2,5n5n3t3z" file
- 刪除5行到最后一行
sed -r "5,$ n5n3t3z" file sed -r "5,$n5n3t3z" file sed -r "5,$d" file
- 刪除最后一行
sed -r "$ n5n3t3z" file sed -r "$n5n3t3z" file sed -r "$d" file
-
s 替換匹配上的字符
sed -r “s/正則查找的內(nèi)容/要替換的內(nèi)容/” file
也可以使用 # 分割,當(dāng)要替換的內(nèi)容中有/或其他特殊含義字符時可以使用#,或者使用轉(zhuǎn)義
sed -r “s#正則查找的內(nèi)容#要替換的內(nèi)容#” file默認(rèn),只會替換每一行中的第一個匹配上的字符串;如果要全部替換,需要在最后的 / 后加個g,代表行內(nèi)匹配上的字符串都替換
# 將含有 abc 的行 的第一個 abc 換成 def sed -r "s/abc/def/" file # 將含有 abc的行 的所有 abc 都換成 def sed -r "s/abc/def/g" file
sed 的 s 命令中,如果要引用查找到的字符串可以使用() + \1 或 &(&獲取的是整個查找條件而忽視() ) 獲取
和 vim 中 類似。# 匹配abcd ,然后在然后取出abc,再在后面拼接123,最終結(jié)果是 abcd 換成 abc123 # ;\1 代表前面第一個()內(nèi)的內(nèi)容,依次遞增;&取的值是 整個條件命中字符串,而僅僅不是()中的內(nèi)容 sed -r 's/(abc)d/\1123/' file 結(jié)果就是 abc123
s 命令如果要按照行號進(jìn)行匹配,則需要將行號放到 s前面,一般使用行號,是針對整行進(jìn)行操作,要么替換整行 要么 在前后追加
# 行首插入 123,有以下三種寫法 sed -r '1 s/^/123/' file # ^ 代表行首字符,將^ 替換為123 sed -r '1 s/(.*)/123\1/' file sed -r '1 s/.*/123&/' file # 行尾插入 123,有以下三種寫法 sed -r '1 s/$/123/' file # $ 代表行首字符,將$ 替換為123 sed -r '1 s/(.*)/\1123/' file sed -r '1 s/.*/&123/' file # 整行替換 為 123 等同于 c 命令 sed -r '1 s/(.*)/123/' file sed -r '1 s/.*/123/' file
-
r 讀取文件,寫入到sed指定的文件
讀取一個文件的內(nèi)容,默認(rèn)會追加到 sed指定的文件中的每一行下面。
如果要追加在目標(biāo)文件的指定行的下面,
可以在 r前面加上行號,同樣,這里可以使用$表示最后一行
還可以使用正則匹配行,在匹配上的每一行下面都會追加讀取到的內(nèi)容,注意正則表達(dá)式使用 / / 分割
# 取sourcefile的內(nèi)容, 追加到 destfile每一行后面
sed -r 'r sourcefile' destfile
# 讀取sourcefile的內(nèi)容, 追加到 destfile最后一行后面
sed -r '$r sourcefile' destfile
# 讀取sourcefile的內(nèi)容, 追加到 destfile第一行后面
sed -r '1r sourcefile' destfile
# 讀取sourcefile的內(nèi)容, 追加到 正則表達(dá)式匹配上的每一行后面
sed -r '/正則表達(dá)式/r sourcefile' destfile
- w 寫入文件,讀取sed指定文件的內(nèi)容寫入另一個文件
將 sed指定的文件 sourcefile,另存為另一個文件 destfile
同樣可以使用 行號或者 正則,選中想要保存的部分行,這樣就是匹配上的行保存到目標(biāo)文件中。
# 將 整個sourcefile文件內(nèi)容寫入 destfile
sed -r 'w destfile' sourcefile
# 將sourcefile文件 指定行寫入 destfile
sed -r '1w destfile' sourcefile
# 將sourcefile文件 指定范圍行寫入 destfile
sed -r '1,5w destfile' sourcefile
# 將sourcefile文件 正則匹配上的行 寫入 destfile
sed -r '/正則表達(dá)式/w destfile' sourcefile
- a 追加內(nèi)容,在匹配行下面寫入數(shù)據(jù)
和上面一樣,可以使用固定行號,范圍行號以及正則表達(dá)式匹配要追加的行,不限制時,應(yīng)用到每一行。
追加多行可以使用 \n 轉(zhuǎn)義實(shí)現(xiàn)
# 給file文件每一行下面添加一行 123
sed -r 'a 123' file
每一行下面追加兩行123
sed -r 'a 123\n123' file
-
i 插入內(nèi)容,在匹配行上面寫入數(shù)據(jù)
規(guī)則與上面 a 類似,只是內(nèi)容寫到匹配行的上面 -
c 替換匹配上的整行內(nèi)容
規(guī)則與上面a 類似,對匹配上的行,整行替換
# 第一行替換為 123
sed -r '1c 123' file
# 第一行到第二行替換為 123
sed -r '1,2c 123' file
# 匹配上正則的行 替換為 123
sed -r '/正則表達(dá)式/c 123' file
- n 匹配當(dāng)前行,組合其他sed命令作用到下一行
需與其他命令結(jié)合使用,n命令僅僅用于查找,組合的其他命令才是作用到下一行的命令
# 刪除第二行
sed -r '1n;d' file
- ! 反選;對匹配的結(jié)果取反(!放在查詢條件之后,與常規(guī)的取反操作放在最前面不同),然后應(yīng)用后面的sed命令
# 刪掉 除了第一行的其他行
sed -r '1! d' file
# 刪掉 正則 不 匹配的行
sed -r '/正則表達(dá)式/! d' file
- e 多次編輯,
正常sed 只能應(yīng)用一次編輯
類似
sed -r '1 d' file
如果想一個命令執(zhí)行多個獨(dú)立的編輯操作,可以使用-e
# 刪除第一行 & 第二行的aa換成bb
sed -r -e '1 d' -e '2 s/aa/bb/' file
當(dāng)然,也可以使用分號(;)隔離多個獨(dú)立的 查找應(yīng)用 命令文章來源:http://www.zghlxwxcb.cn/news/detail-635076.html
# 刪除第一行 & 第二行的aa換成bb
sed -r '1 d;2 s/aa/bb/' file
如果是對同一行執(zhí)行多個操作可以使用分號(;)隔離多個sed 應(yīng)用命令文章來源地址http://www.zghlxwxcb.cn/news/detail-635076.html
# 第二行的 aa換成bb & 第二行的 cc換成dd
sed -r '2 {s/aa/bb/;s/cc/dd/}' file
到了這里,關(guān)于Shell編程基礎(chǔ)(十五)文本三劍客(sed)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!