由于被疫情打乱更博节奏,已经好久没有更新博客了,今天来一发笔记,记录一下 linux 三剑客的常用操作。所谓的三剑客,其实就是 grep
awk
sed
三个命令,在 linux 操作中,特别是关于文本的查找和修改,这三条命令可谓是各显神通。
三个命令的一般性作用:
sed 命令的匹配是以行为单位的,这个概念很重要。
直接上测试文件 file.conf,内容如下:
bookbookbookbook
name=jack
ip=127.0.0.1
url=https://abc.xxxxx.com
xyz showowof3442 lmn
bookbook
sed 's/book/good/' file.conf
结果如下:
goodbookbookbook
name=jack
ip=127.0.0.1
url=https://abc.xxxxx.com
xyz showowof3442 lmn
goodbook
可以看到只将每个匹配到的行的第一次匹配到的 book 并替换成了 good
上面的替换虽然可以做到将book替换成新的内容,但是有时候我们可能需要对某个单词进行替换,而不能替换包含这个单词的单词,就比如上面的内容,假如现在要将 bookbook 替换成 newbook ,先看看使用上面的替换方式结果如何
sed 's/bookbook/newword/' file.conf
结果如下
newwordbookbook
name=jack
ip=127.0.0.1
url=https://abc.xxxxx.com
xyz showowof3442 lmn
newword
可以看到,第一行和最后一行都被替换了,而实际上,我们只想替换 bookbook ,也即是需要精确匹配,而不是现在的模糊匹配,这时候可以用下面的方式进行替换:
sed 's/\<bookbook\>/newword/' file.conf
结果如下
bookbookbookbook
name=jack
ip=127.0.0.1
url=https://abc.xxxxx.com
xyz showowof3442 lmn
newword
正则替换其实也跟普通的替换一样的语法格式,只不过匹配项和替换项都是用的正则表达式而已
sed 's/\(xyz\)\(.*\)\(lmn\)/\1 1234567 \3/g' file.conf
结果如下:
bookbookbookbook
name=jack
ip=127.0.0.1
url=https://abc.xxxxx.com
xyz 1234567 lmn
bookbook
可以看到上面首先将匹配项使用正则拆分成了3部分,然后在替换项的内容中引用了第1和第3部分,并拼接成了新的替换项,这种操作也是文件修改中非常常用的一种用法。
sed 's/book/good/2g' file.conf
结果如下:
bookgoodgoodgood
name=jack
ip=127.0.0.1
url=https://abc.xxxxx.com
xyz showowof3442 lmn
bookgood
可以看到,这里是从每个匹配到的行的第2次匹配结果开始替换的,所有每行第一个匹配结果并不会替换
sed 's/book/good/g' file.conf
结果如下:
goodgoodgoodgood
name=jack
ip=127.0.0.1
url=https://abc.xxxxx.com
xyz showowof3442 lmn
goodgood
sed '/book/c newtext' file.conf
结果如下:
newtext
name=jack
ip=127.0.0.1
url=https://abc.xxxxx.com
xyz showowof3442 lmn
newtext
可以看到,这里是将匹配到的行的整个内容都替换成了指定内容,这种用法也很常见,比如我们对于这个文件需要将url的地址更换掉,可以执行如下命令即可:
sed '/url=/c url=https://tendcode.com' file.conf
顾名思义,直接删除掉匹配到的所有行
sed '/book/d' file.conf
结果如下:
name=jack
ip=127.0.0.1
url=https://abc.xxxxx.com
xyz showowof3442 lmn
版权声明:如无特殊说明,文章均为本站原创,转载请注明出处 本文链接:https://cloud.tencent.com/developer/article/2123547 许可协议:署名-非商业性使用 4.0 国际许可协议