添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
高兴的帽子  ·  vue-electron使用serialpo ...·  1 年前    · 
私奔的绿豆  ·  python - Tkinter ...·  1 年前    · 
Linux三剑客命令—sed

Linux三剑客命令—sed

sed是一个“交互式的”面向字符流的编辑器,它被认为是面向字符流的,这是因为输入流通过程序将输出直接送到标准输出端。输入一般来自文件,但也可可以直接来自键盘。输出在默认情况下是在终端的屏幕上,但是也可以输出到文件中,sed能够通过解析脚本来工作,该脚本指定了将要执行的动作。

sed在处理文件时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容发送到输出端,然后接着处理下一行,这样不断重复,直至文件末尾。这个过程中文件内容并没有改变,除非你使用重定向存储输出。sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

调用sed命令有两种形式:

sed [options] command file

sed [options] -f scriptfile file

【常用选项参数】

-n, --quiet, --silent 取消自动打印模式空间
-e script, --expression=script 在指令模式上进行sed的动作编辑
-f script-file, --file=script-file 以脚本文件的内容作为sed执行的指令
-i[SUFFIX], --in-place[=SUFFIX] 编辑文件,不输出
-c, --copy 使用复制代替重命名指定文件
-l N, --line-length=N 为l命令指定行数
-s, --separate 把文件作为独立的个体而不是单独连续的字符流

【常用命令参数】

a \ 追加文本
i \ 直接修改内容
r filename 从文件中读行
c \ 替换指定文本
d 从模式空间删除行
D 删除pattern space内第一行
h/H 复制/追加pattern space的内容到hold space
g/G 复制/追加hold space到pattern space
l 列出行的内容
n/N 读取/追加下一行的内容到pattern space
p 打印模式空间的内容,通常与-n一起使用
s 替换指定字符
w 将模式空间写入文件
x 交换pattern space和hold space的内容

【sed替换标记】

g 全局替换
p 打印
w 把行写入文件
x 交换pattern space和hold space的内容
y 表示把一个字符翻译成另一个字符
\1 子字符串匹配标记
& 已匹配的字符串标记

追加:

sed 'a\the end\' sed.txt  在所有行末尾追加一行“the end”
sed '$a\the end\' sed.txt 在最后一行末尾追加“the end”
sed '3,5a\the end\' sed.txt 在3到5末尾追加“the end”
sed 's/^/\#&/g' sed.txt   在每行开头加上“#”
sed 's/$/&\!/g' sed.txt   在文件中每行结尾加上“!”
sed '$r sed.txt' sed.txt 将文件sed.txt的内容追加到sed.txt的最后一行

插入:

sed 'i A' sed.txt 在每一行前插入“A”
sed '1i\begin\' sed.txt  在第一行前插入一行“begin”

替换:

sed '1,2c str' sed.txt  将1-2行替换为“str”(1-2行合并被替换)
sed 'y/ad/AD/' sed.txt  替换所有匹配字符“a”->“A”,“d”->“D”
批量替换IP地址
sed -r 's/192.168.0.([0-9]{1,2})/172.16.0.\1/g' sed.txt

删除:

sed -e '2d' sed.txt  删除第2行
sed -e '3,$d' sed.txt  删除第3行到末尾
sed -e '$d' sed.txt  删除最后一行
sed -e '/^\#/'d sed.txt  删除以“#”开头的行
sed -i '/^$/d' sed.txt  删除空白行
sed 's/[ ]*//g' sed.txt  删除空格
sed 'N;$!P;D' sed.txt   删除倒数第2行
sed 'N;$!P;$!D;$d' sed.txt   删除倒数2行
若要删除最后n行,可参考如下:
max=$(sed -n '$=' sed.txt)
sed $(($A-n+1)),${A}d sed.txt

其他示例:

sed '=' sed.txt         打印所有行号
sed '$=' sed.txt        打印最后一行的行号
sed -n '$=' sed.txt     打印总行数
sed -i.bak 's/123/321/g' sed.txt  修改文件前备份
将sed文件中包含“hello”字符串的行复制到temp文件中。
sed -e '/hello/w temp.txt' sed.txt 
sed '/^$/d;G' sed.txt 删除所有空白行,并在每一行后面增加一个空行
sed -e '1h' -e '3x' sed.txt  将第1行的数据覆盖第3行
sed '1h;3G' sed.txt 将第1行复制到第3行后面
sed '1h;1d;$g' sed.txt  将第1行剪切覆盖最后1行
将包含“test”字符串的所有行上替换“123”->“321”,然后“cba”->“abc”
sed -e '/test/s/123/321/g' -e 's/abc/cba/g' sed.txt
sed -e '/test/s/123/321/g ; s/abc/cba/g' sed.txt
打印奇数行
sed -n -e 'P' -e 'N' sed.txt 
sed -n 'p;n' sed.txt
sed -n '1~2p' sed.txt
打印偶数行
sed -n 'n;p' sed.txt
sed -n '2~2p' sed.txt