本文主要是介绍shell sed脚本速查,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
删除
#删除首行前10个字符
sed -i 's/^.\\{10\\}//' test1.txt.bak1# 在每一行后面增加一空行
sed G# 将原来的所有空行删除并在每一行后面增加一空行。这样在输出的文本中每一行后面将有且只有一空行。
sed '/^$/d;G'# 将第一个脚本所产生的所有空行删除(即删除所有偶数行)
sed 'n;d'# 将每一行前导的“空白字符”(空格,制表符)删除 使之左对齐
sed 's/^[ t]*//' # 见本文末尾关于't'用法的描述# 将每一行拖尾的“空白字符”(空格,制表符)删除
sed 's/[ t]*$//' # 见本文末尾关于't'用法的描述# 将每一行中的前导和拖尾的空白字符删除
sed 's/^[ t]*//;s/[ t]*$//'
插入
# 在每一行后面增加两行空行
sed 'G;G'# 在每一行后面增加两行空行
sed 'G;G'# 在匹配式样“regex”的行之前插入一空行
sed '/regex/{x;p;x;}'# 在匹配式样“regex”的行之后插入一空行
sed '/regex/G'# 在匹配式样“regex”的行之前和之后各插入一空行
sed '/regex/{x;p;x;G;}'# 在每一行开头处插入5个空格(使全文向右移动5个字符的位置)
sed 's/^/ /'# 以79个字符为宽度,将所有文本右对齐
sed -e :a -e 's/^.{1,78}$/ &/;ta' # 78个字符外加最后的一个空格# 以79个字符为宽度,使所有文本居中。在方法1中,为了让文本居中每一行的前
# 头和后头都填充了空格。 在方法2中,在居中文本的过程中只在文本的前面填充
# 空格,并且最终这些空格将有一半会被删除。此外每一行的后头并未填充空格。
sed -e :a -e "s/^.\\{1,77\\}$/ & /;ta"
sed -e :a -e 's/^.{1,77}$/ & /;ta' # 方法1
sed -e :a -e 's/^.{1,77}$/ &/;ta' -e 's/( *)1/1/' # 方法2
编号
# 为文件中的每一行进行编号(简单的左对齐方式)。这里使用了“制表符”(tab,见本文末尾关于't'的用法的描述)而不是空格来对齐边缘。
sed = filename | sed 'N;s/n/t/'# 对文件中的所有行编号(行号在左,文字右端对齐)。
sed = filename | sed 'N; s/^/ /; s/ *(.{6,})n/1 /'# 对文件中的所有行编号,但只显示非空白行的行号。
sed '/./=' filename | sed '/./N; s/n/ /'# 计算行数 (模拟 "wc -l")
sed -n '$='
文本转换和替代
# Unix环境:转换DOS的新行符(CR/LF)为Unix格式。
sed 's/.$//' # 假设所有行以CR/LF结束
sed 's/^M$//' # 在bash/tcsh中,将按Ctrl-M改为按Ctrl-V
sed 's/x0D$//' # ssed、gsed 3.02.80,及更高版本# Unix环境:转换Unix的新行符(LF)为DOS格式。
sed "s/$/`echo -e \\r`/" # 在ksh下所使用的命令
sed 's/$'"/`echo \\r`/" # 在bash下所使用的命令
sed "s/$/`echo \\r`/" # 在zsh下所使用的命令
sed 's/$/r/' # gsed 3.02.80 及更高版本# DOS环境:转换Unix新行符(LF)为DOS格式。
sed "s/$//" # 方法 1
sed -n p # 方法 2# DOS环境:转换DOS新行符(CR/LF)为Unix格式。
# 下面的脚本只对UnxUtils sed 4.0.7 及更高版本有效。要识别UnxUtils版本的
# sed可以通过其特有的“--text”选项。你可以使用帮助选项(“--help”)看
# 其中有无一个“--text”项以此来判断所使用的是否是UnxUtils版本。其它DOS
# 版本的的sed则无法进行这一转换。但可以用“tr”来实现这一转换。
sed "s/r//" infile >outfile # UnxUtils sed v4.0.7 或更高版本
tr -d r <infile >outfile # GNU tr 1.22 或更高版本
==在每一行中查找字串“foo”,并将找到的“foo”替换为“bar”==
sed ':a;$!{N;ba};s/2/4/' #只替换第一次出现的sed 's/foo/bar/' # 只替换每一行中的第一个“foo”字串
sed 's/foo/bar/4' # 只替换每一行中的第四个“foo”字串
sed 's/foo/bar/g' # 将每一行中的所有“foo”都换成“bar”
sed 's/(.*)foo(.*foo)/1bar2/' # 替换倒数第二个“foo”
sed 's/(.*)foo/1bar/' # 替换最后一个“foo”# 只在行中出现字串“baz”的情况下将“foo”替换成“bar”
sed '/baz/s/foo/bar/g'# 将“foo”替换成“bar”,并且只在行中未出现字串“baz”的情况下替换
sed '/baz/!s/foo/bar/g'# 不管是“scarlet”“ruby”还是“puce”,一律换成“red”
sed 's/scarlet/red/g;s/ruby/
这篇关于shell sed脚本速查的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!