Table of Contents
一、简介
sed命令是著名的Linux系统流编辑器,具有强大的文本处理功能,和grep、awk一并称为Linux下的三大文本处理工具。
二、基本用法
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
option :
-r, --regexp-extended
use extended regular expressions in the script.
-n, --quiet, --silent
suppress automatic printing of pattern space
-e script, --expression=script
add the script to the commands to be executed
-f script-file, --file=script-file
add the contents of script-file to the commands to be executed
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if extension supplied). The default operation mode is to break symbolic and hard links.
This can be changed with --follow-symlinks and --copy.
Address :
1 startline,endline
e.g 1,33
$ 最后一行
2 /regexp/
/^root$/
3 /pattern_1/,/pattern_2/
第一次被pattern1匹配到的行开始,至第二次被pattern2匹配到的行结束,这中间的所有行
4 LineNumber
指定的行
5 startline, +N
从startline开始向后的N行
Command :
d : 删除符合条件的行
p:打印符合条件的行
a\string 在指定行后追加新行,内容为string
\n 可以换行
i\string 在指定的行前面添加新行,内容为string
r file 将指定的文件内容添加至符合条件的行处
w file 将指定范围内的行另存至指定文件中
s/pattern/string/ 修饰符 查找并替换,默认只替换每行中第一次被模式匹配到的字符串
修饰符
g 全局替换
i 忽略大小写
s/// : s### , s@@@
三、实战练习
已知文本文件test的内容如下:
# jjj
# like love like
# love like rlike #
# love like rlike #
# love like rlike #
# love like rlike #
# love like rlike #
id:3:initdefault
#kkkkkkk
1 删除文件test中行首的空白符
sed -r 's/^[[:space:]]+//g' test
2 替换文件中id:3:initdefault一行的数字为5
sed 's/\(id:\)[0-9]\(:initdefault\)/\15\3/g' test
3 删除test文件中的空白行
sed '/^$/d' test
4 删除test文件中开头的#号
sed 's/^#//' test
5 删除test文件中开头的#号及后面的空白字符,但要求#后面必须有空白字符
sed 's/^\(#[[:space:]]\{1,\}\)*//g' test
6 删除test文件中以空白字符后面跟#的行中的开头的空白字符和#
sed 's/^\([[:space:]]\{1,\}\)#//g' test
或sed -r 's/^#[[:space:]]+\)*//g' test
7 取出一个文件路径的目录名称,后向引用的例子
echo "/etc/passwd" | sed -r 's@^(/.*/)[^/]+/?@\1/g'