在linux系统中,sed的文本处理无疑是一个非常强大的工具,用好sed可以使我们工作效率成倍提升,下面就小结一下sed的常用命令参数,只需关注常用的即可。
选项参数
首先来一发sed --help了解一下常用的参数
# sed --help
Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...
-n 忽略打印输出,一般是避免默认输出,只有我们处理的那一行文本会显示在屏幕上
-e 在命令行进行文本的处理动作
-f 后接脚本文件之类,类似于上面的-e参数,只是将执行的命令放到了一个指定的文件中
-i 修改文件内容
-c 当使用上面的-i参数修改文件内容时,为了防止修改错误,会自动生成一个和原始文件内容相同且以c结尾的备份文件
-l 后接数字,指定一行的长度
-r 使用正则表达式
命令参数
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(默认是偶数行,a前面可以指定行号)
c :替换, c 的后面可以接字符串,这些字符串会整行替换掉匹配的行。
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列号,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,常用的替换字符操作,如 ‘s/aa/bb/g’ ,用于替换匹配的字符。
示例:
# a 新增
[root@localhost ~]# sed ‘3axxxxx‘ t 1 2 3 xxxxx #在第三行后增加指定内容 4 5 [root@localhost ~]# sed ‘2,4axxxxx‘ t 1 2 xxxxx #在2-4行后每行增加指定内容 3 xxxxx 4 xxxxx 5 # c 替换某一行内容,可以指定行号,也可以匹配内容 [root@localhost ~]# for n in {1..6};do echo "aa$n" >>test.txt;done [root@localhost ~]# sed ‘2cxxxxx‘ test.txt aa1 xxxxx #替换掉指定行的内容 aa3 aa4 aa5 aa6 [root@localhost ~]# sed ‘2,5cxxxxx‘ test.txt aa1 xxxxx #替换多行 aa6 [root@localhost ~]# sed ‘/aa3/cxxxxx‘ test.txt aa1 aa2 xxxxx #指定内容匹配替换 aa4 aa5 aa6 # d 删除,可以匹配行号或者内容 [root@localhost ~]# sed 3,5d test.txt aa1 aa2 #删除3-5行的内容 aa6 [root@localhost ~]# sed /aa5/d test.txt aa1 aa2 aa3 aa4 aa6 # i 插入内容 [root@localhost ~]# sed ‘2ixxxxx‘ test.txt aa1 xxxxx #在第二行之前插入指定内容 aa2 aa3 aa4 aa5 aa6 [root@localhost ~]# sed ‘3,5ixxxxx‘ test.txt aa1 aa2 xxxxx # 3-5行每行前插入指定内容 aa3 xxxxx aa4 xxxxx aa5 aa6 # p 打印输出指定的行或内容,不加参数-n会多出一个全局输出 [root@host6 ~]# sed -n 2p aaa.txt aabb2 [root@host6 ~]# sed -n 2,4p aaa.txt aabb2 aabb3 aabb4 [root@host6 ~]# sed -n /aabb3/p aaa.txt aabb3 # s 取代匹配的字符 [root@host6 ~]# sed s/bb3/xx3/ aaa.txt aabb1 aabb2 aaxx3 #替换指定内容 aabb4 aabb5 aabb6
除了上面的这一些最基础的用法外,sed 还支持跟加复杂的高级匹配,支持正则,变量和多个匹配字符(address)的匹配。
sed 指定行范围内匹配
[root@host6~]# sed -i ‘1, /test/ s#123#888#g‘ test.txt [root@host6~]# cat test.txt test 888 test 888 test 123 test 123 #适合多次过滤匹配,用于筛选条件较多的场景 [root@host6 ~]# cat test.txt aabb111 aacc222 bbdd111 bbcc222 zzaa333 eevv111 bbcc222111cvcv [root@host6 ~]# sed ‘/^bb/ s/222/000/‘ test.txt aabb111 aacc222 bbdd111 bbcc000 zzaa333 eevv111 bbcc000111cvcv #匹配第六行后三行,符合条件的文本内容 [root@host6 ~]# sed ‘6,/^bb/ s/222/000/‘ test.txt aabb111 aacc222 bbdd111 bbcc222 zzaa333 eevv111 bbcc000111cvcv
sed中引用shell变量的四种方法
在使用sed引用变量时可能会出现不成功的情况,下面这些规则能让我们更好的使用sed变量
eval sed ’s/$a/$b/’ filename
sed "s/$a/$b/" filename
sed ’s/’$a’/’$b’/’ filename
sed s/$a/$b/ filename
简单正则匹配字符的方法
$表示匹配结尾,^ 表示匹配开头, &表示前面匹配的内容,= 表示输出行号。
‘/\.$/d‘ 删除以句点结尾行
‘s/[[:space:]]/ /‘ 删除一个以上空格,用一个空格代替
‘/^[[:space:]]/d‘ 删除行首空格
‘s/[[:space:]]\+//‘ 删除空格
‘/^$/d‘ 删除空行
‘s/^.//‘ 删除第一个字符,包括空格
以上只是sed的一些基础用法,在实际应用中一般都比这个复杂。
本文出自 “Trying” 博客,请务必保留此出处http://tryingstuff.blog.51cto.com/4603492/1839867
原文地址:http://tryingstuff.blog.51cto.com/4603492/1839867