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