sed
是 unix
环境下常用的流处理工具, 可以处理字符流, 文件或者二进制文件流。
各个 unix/linux
发行版都会配备 sed
及其衍生的命令工具, 因此, 掌握该工具的基本用法, 足以满足我们日常的许多文本处理的任务。
以下采用示例的方式对 sed
进行基本用法介绍. 如果有兴趣了解更高级的使用技巧,
本文采用的是 GNU sed 4.4
版本进行示例介绍, 以下示例可在 GNU bash 4.4.20(1)
版本下运行。
请参阅 参考文档
###
开头内容均为注释$
开头内容均为命令行### -n 选项代表只打印匹配的行
### 如果没有 -n 选项, 则会打印所有输入内容, 同时再打印匹配的内容
$ echo -e "hello\npython\nphp" | sed -n -e ‘/python/p‘
python
$ echo "hello
python
and
php" | sed -n -e ‘3 p‘
$ echo -e "hello\npython\nphp" | sed -e ‘1,2p‘ sample.txt
hello
python
$ seq 7 | sed -e ‘n; n; s/./x/g‘
1
2
x
4
5
x
$ echo "hello
world
python" | sed -n -e "2,3! p"
$ seq 10 | sed -n -e ‘1~3p‘
1
4
7
10
### /regex/ regex 是正则, I 表示忽略大小写, d 表示删除匹配内容
$ echo -e "hello\npython 2.7\nphp\nPython 3\nIPython\nC++" | sed -e ‘/python/Id‘
hello
php
C++
$ echo -e "hello\npython 2.7\nphp\nPython 3" | sed -e ‘2d‘
hello
php
Python 3
$ echo -e "hello\npython 2.7\nphp\nPython 3\nIPython\nC++" | sed -e ‘2,3d‘
hello
Python 3
IPython
C++
$ echo -e "hello\npython 2.7\nphp\nPython 3\nIPython\nC++" | sed -e ‘2,$d‘
hello
$ echo "hello,
world.
hello,
python." | sed -e ‘/^\s*$/d‘
hello,
world.
hello,
python.
替换命令格式: [address range]s/regex/replacement/[flags]
&
可以获取匹配的内容, \N
可以获取匹配分组的内容, \1
可以获得正则匹配到的分组内容第一个元素man sed
)$ echo -e "I like cat but you don‘t like cat!" | sed -e ‘s/cat/dog/‘
I like dog but you don‘t like cat!
$ echo -e "Everyone like cat and I like cat too!" | sed -e ‘s/cat/dog/g‘
Everyone like dog and I like dog too!
$ echo "Tom like cat and python.
James like dog and python.
Kate like cat and php." | sed -e ‘/cat/ s/python/php/g‘
Tom like cat and php.
James like dog and python.
Kate like cat and php.
### 注意 ! 和 s 之间需要有空格. /cat/! 标示匹配 /cat/ 范围之外的行
### 同理, 1,2! 标示不要第 1 到 第 2 行
$ echo "Tom like cat and python.
James like dog and python.
Kate like cat and php." | sed -e ‘/cat/! s/python/php/g‘
Tom like cat and python.
James like dog and php.
Kate like cat and php.
$ echo "I like python.
James like python too.
Kate like go and python." | sed -e ‘2,3s/python/php/g‘
I like python.
James like php too.
Kate like go and php.
### 替换目录 ‘/aaa/bbb‘ 为 ‘/var/log‘, 使用 | 作为分隔符
$ echo "/aaa/bbb/ccc" | sed -e ‘s|/aaa/bbb|/var/log|g‘
/var/log/ccc
$ echo "Hello, I like python" | sed -e ‘s/python/& and php/‘
Hello, I like python and php
$ echo "Hello, I like python" | sed -e ‘s/\(python\)/\1 and php/‘
Hello, I like python and php
$ echo "I like python and php." | sed -e ‘y/aeio/AEIO/‘
I lIkE pythOn And php.
### -i[backup_suffix] 后面紧跟着备份文件名后缀名.
### 如果 [backup_suffix]为 ‘‘ 空字符串,则表示直接替换原始文件内容,不备份
$ cat sample.txt
Hello
world.
I like python and php.
$ sed -i‘‘ -e ‘/python/d‘ sample.txt
$ cat sample.txt
Hello
world.
原文:https://www.cnblogs.com/yxhblogs/p/12713697.html