shell脚本sed命令行编辑器
Posted zqq_hello_world
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本sed命令行编辑器相关的知识,希望对你有一定的参考价值。
sed编辑器被称为流编辑器。sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在命令文本文件中。sed命令并不会影响原本文件,只会重新把改变的内容输出,如果需要改变原本内容需要用-i选项,sed -i
sed命令格式
sed [options] [script] [file]
修改文本内容
#s命令会将斜杠(/)指定的第二个字符串替换第一个字符串
echo "this is text" | sed 's/this/that/'
#修改文件内容,默认只会替换每行中出现的第一处
sed 's/this/that/' /home/text
#多命令修改内容,通过-e选项,通过分号(;)分割
sed -e 's/this/that/;s/is/iss/' /home/text
默认只会替换没行出现的第一处,如果想要多替换需要使用替换标记
#格式。替换标记放在最后
s/pattern/replacement/flags
四种可用的替换标记
1、数字,表明新文本将替换第几处模式匹配的地方
2、g,表明新文本将会替换所有匹配的文本
3、p,表明原先行的内容要打印出来
4、w file ,将替换的结果写到文件中
#替换文件中内容命令格式:sed 's/zqq/httlo/flags' filepath
#替换第二处出现的字符串
echo "zqq zqq test" | sed 's/zqq/hello/2'
#替换所有匹配字符串
echo "zqq zqq test" | sed 's/zqq/hello/g'
#替换行内第一处匹配的字符串,然后并打印原字符串,-n选项
echo "zqq zqq test" | sed -n 's/zqq/hello/p'
#将替换结果写到文件中,只会把有匹配内容的字符串写到文件
echo "zqq zqq test" | sed "s/zqq/hello/w /home/text"
替换分隔符
默认情况下sed命令是以反斜杠为分隔符,在linux中反斜杠用到的地方很多,在文本内容有反斜杠时需要用反斜杠(\\)来转义,看起来很不方便,sed编辑器允许选择其他字符来作为替换命令中的分隔符
#用!来替代/
echo "zqq/zqq hello" | sed 's!/zqq/zqq!zqq!g'
删除命令
sed编辑器可以删除固定的行
#删除文件第三行
sed '3d' /home/text
#删除指定区间,第二行,第三行
sed '2,3d' /home/text
#删除包含指定内容的行
sed '/hello world/d' /home/text
插入和附加文本
sed编辑器允许向数据流插入喝附近文本。插入(i)会在指定行前增加一个新行。附加(a)会在指定行后增加一个新行
#将一个新行插入到数据第三行前
sed '3i\\hello world' /home/text
#将新行插入第三行后
sed '3a\\hello world' /home/text
#将新行插在末尾
sed '$a\\hello world' /home/text
修改行
修改命令(c)允许修改数据流中整行文本的内容
#修改第三行内容
sed '3c\\hello world' /home/text
#修改匹配内容的所有文本行,把包含zqq的内容修改修改成hellworld
sed '/zqq/c\\hello wolrd' /home/text
#将多行文本替换指定文本,将2,3行替换成hello wolrd
sed '2,3c\\hello world' /home/text
转化命令
转化命令(y)是可以处理单个字符的sed编辑器命令
#第一位7会替换前面的1,8会替换2,注意123和789不是一个字符,而是对应的位替换对应的单个字符,
#如果前后字符数不相等会产生一条错误信息
echo 'y/123/789/' /home/text
#替换1,2,3
echo "hello 1,2,3" | sed 'y/123/789/'
打印内容
#打印匹配zqq的行
sed -n '/zqq/p' /home/text
#打印第2行到第5行
sed -n '2,5p' /home/text
以上是关于shell脚本sed命令行编辑器的主要内容,如果未能解决你的问题,请参考以下文章
sed && awk工具 及一些经常使用的shell脚本