linux sed命令
Posted dyzy480
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux sed命令相关的知识,希望对你有一定的参考价值。
sed元字符集
^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
匹配0个或多个字符,如:/sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。
[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
(..) 匹配子串,保存匹配的字符,如s/(love)able/1rs,loveable被替换成lovers。
& 保存搜索字符用来替换其他字符,如s/love/&/,love这成love。
< 匹配单词的开始,如:/<love/匹配包含以love开头的单词的行。
> 匹配单词的结束,如/love>/匹配包含以love结尾的单词的行。
x{m} 重复字符x,m次,如:/0{5}/匹配包含5个0的行。
x{m,} 重复字符x,至少m次,如:/0{5,}/匹配至少有5个0的行。
x{m,n} 重复字符x,至少m次,不多于n次,如:/0{5,10}/匹配5~10个0的行。
在行前增加一行数据
nl /etc/passwd | sed ‘2a drink tea‘
nl /etc/passwd | sed ‘2i drink tea‘
直接修改文件
- sed 的 -i 选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!
实例
- 将原文件中的 “20190413”的日期格式改成 “2019-04-13 12:00:00”的时间格式:
[root@hangzhoujfzx dyzy]# cat tmp
"xietiandao",34,"Anhui Province",20190323,45899.3,ok
"jinyi",31,"Zhejiang Proveince",20200123,34.23,yes
"xiezixin",5,"Zhejiang Province",20200321,467.34,no
[root@hangzhoujfzx dyzy]# sed 's/,([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9]),/,"1234-56-78 12:00:00",/' tmp
"xietiandao",34,"Anhui Province","2019-03-23 12:00:00",45899.3,ok
"jinyi",31,"Zhejiang Proveince","2020-01-23 12:00:00",34.23,yes
"xiezixin",5,"Zhejiang Province","2020-03-21 12:00:00",467.34,no
sed -i 's/,([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9]),/,"1234-56-78 12:00:00",/' tmp
- -i 是修改源文件。
以上是关于linux sed命令的主要内容,如果未能解决你的问题,请参考以下文章