参考链接: https://quickref.me/sed
语法格式:
sed [ options] command [ input-file]
options Example:
-i: 直接备份和修改输入文件 : sed -ibak 's/On/Off/' php.ini
-E: 使用扩展正则表达式 : sed -E 's/[0-9]+//g' input-file
-n: 取消打印默认图案空间 : sed -n '3 p' config.conf
-f: 执行sed脚本文件 : sed -f script.sed config.conf
-e: 执行多个sed命令 : sed -e 'command1' -e 'command2' input-file
Command Example:
p: sed -n '1,4p' fileName : 打印1-4行
d: sed '1,4d' filename : 打印1-4之外的内容
w: sed -n '1,4w output.txt' filename : 将fileName中的1-4行写入output.txt,即使output.txt 不存在也可以,有点类似于复制,指定内容的复制
a: sed '2 a new-line' fileName : 后面追加一行
i: sed '2 i new-line' fileName : 前面追加一行
Sed examples:
cat report.txt | sed 's/Nick/John/g' 将report.txt中所有的Nick替换成功John, 仅改变打印在终端的内容,文本内容不会发生修改,g 是代表全局符号 还有其他Flag
1,2 .. . : 替换第n次出现, 只能对每行出现的第几次进行修改
w: 只将替换的行写入文件 cat report.txt | sed 's/Nick/John/w output.txt' 默认将每行 出现的第一次匹配的值修改后写入新的文件, output.txt可以不存在,在终端也会有输出,源文件如果存在空行,新文件不会存在空行情况
I: 搜索时忽略大小写
echo '123abc' | sed 's/[0-9]+//g' 将数字去掉
echo "hello world" | sed -e 's/h/H/g' -e 's/w/W/g' 将小写的字母替换成大写,执行多个匹配命令
sed '5 s/old/new/' fileName 将第五行匹配到的内容修改输出到终端,不修改源文件
sed 'hello/s/world/univers/' fileName 将hello为开头的行中匹配到的内容替换输出到终端,不会修改源文件
sed 's/\\$//' fileName 将所有行最后的反斜线 \ 替换为空字符串
sed 's/^\s*//' fileName 删除每行开头的所有空白 不会修改源文件
sed 's/#.*$//' fileName 删除注释。即使是那些排在最后的 不会修改源文件
sed 's/old/new/g' fileName 将文件中匹配到的内容修改后输出到终端,不会修改源文件
sed 's/old/new/g' fileName > new.txt 将文件中匹配到的内容修改后输出到终端,不会修改源文件, 内容会输出到新文件中
sed 's/old/new/g' -i fileName 将匹配的内容在源文件进行修改,不会输出到终端
sed 's/old/new/g' -i.backup fileName 将匹配的内容在源文件中修改,并且将原来的内容备份到 fileName.backup 文件中
Sed examples:
echo 's/h/H/g' >> hello.sed
echo 's/w/W/g' >> hello.sed
echo 'hello world' | sed -f hello.sed 利用文件的方式替换小写字母为大写
Sed examples:
sed -n '/hello/p' fileName 将匹配到的内容所在行打印在终端
sed -n '/hello/Ip' fileName 忽略大小写,将匹配到的内容所在行打印在终端
sed -n '/hello/!p' fileName 在终端打印不匹配的内容
Sed examples:
sed '2a Text after line 2' fileName 在第二行后面添加一行,在终端打印,不修改源文件
sed '$a THE END!' fileName 在文件内容最后一行添加内容,打印在终端,不修改源文件
sed '3~3a Some text' fileName 在每三行后添加一行内容,打印在终端,不修改源文件
Sed examples:
sed = fileName | sed 'N;s/\n/\t/' 打印行号在终端输出,不修改源文件
sed -n '$=' fileName 打印文件有多少行 类似 wc -l
Sed examples:
sed '5i line number five' fileName 在第五行前插入一行内容,在终端打印,不修改文件
sed '5,7d' fileName 打印文件在终端,删除5-7行,不修改源文件
sed '3~2d' fileName 从第三行开始每隔2行删除一次
sed '$d' fileName 删除最后一行在终端打印,不修改源文件
sed '/^Hello/d' fileName 删除 Hello开头的所在行在终端打印,不修改源文件
sed '/^$/d' fileName 删除空行,在终端打印,不修改源文件
sed '/^#/d' 删除` ` 开头的所在行,在终端打印,不修改源文件
sed '/^$/d;G' fileName 删除所有空行和双空格; 实测为每行之后添加一个空行,在终端打印,包括最后一行, 不修改源文件
sed 'G;G' fileName 实测为每行之后添加两个空行,在终端打印,包括最后一行,不修改源文件
sed 'n;G' fielName 实测每隔两个行之后添加一个空行,在终端打印,偶数行的最后一行后添加一个空行,奇数行不添加