sed命令小记
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 协议》,转载必须注明作者和本文链接