sed 將內容一行行載入到記憶體空間,處理,然後再列印到螢幕; 預設是不修改原始檔的
sed -niefr 'line action 修飾符' file ...
-n 靜默模式 , 只列印處理的行
-i 直接修改原始檔
-e script -e script
-f sed_script
-r 使用egrep
line
1,100
5
$
$-1
1,+2 第1行開始,向後的2行,即1~3行
/regexp/, /regexp/
action
d
p
a \str
i \str
r file
w file
s/regexp/str/
sed '1,$s/oot/OOT/' file 如果行範圍是1,$即全文,則可省略 sed 's@oot@OOT@' file
& 引用匹配到的整個字串
後向引用 \( \) \1 \2
修飾符 gi
示例:
sed '3,$d' file 刪除
sed '1,+2d' file
sed '/oot/d' file 刪除匹配到的行
sed '/^\//d' file 刪除以 / 開頭的行
sed -n '/^\//p' file 列印
sed '/^\//a \# hello world\n# hello linux' file 追加
sed '$r /etc/issue' file 讀入
sed '1,2r /etc/issue' file
sed '/oot/w /tmp/oot.txt' file 寫出
sed 's@l..e@&r@g' file
sed 's@\(l..e\)@\1r@g' file
history | sed 's#^[[:space:]]*##g' | cut -d' ' -f1
練習:
1. 給定一個路徑,取出父目錄?
echo /etc/profile.d/run.sh | sed -r 's@(/.*/)[a-z._0-9A-Z]+/?@\1@'
echo /etc/profile.d/run_sh | sed -r 's@(/.*/)([a-z._0-9A-Z]+)/?@\2@'
dirname basename
2. 刪除/etc/grub.conf檔案中行首的空白符
sed -r 's@^[[:space:]]+@@g' sedfile
3. 替換/etc/inittab檔案中"id:3:initdefault:"一行中的數字為5
sed -r 's@(id:)[0-9](:[a-zA-Z]+:)@\15\2@' sedfile
4. 刪除/etc/inittab檔案中的空白行
5. 刪除/etc/inittab檔案中開頭的#號
6. 刪除某檔案中開頭的#號及後面的空白字元,但要求#號後面必須有空白字元
7. 匹配某檔案中以空白字元後跟#的行, 並刪除開頭的空白符及# ?
本作品採用《CC 協議》,轉載必須註明作者和本文連結