SED单行模式训练

发布 2021-03-06 05:08:28 阅读 8431

英文标题:useful one-line scripts for sed (unix stream editor)

原标题:handy one-liners for sed (unix stream editor)

整理:eric pement - 电邮:pemente[at]northpark[dot]edu 版本5.5

译者:joe hong - 电邮:hq00e[at]126[dot]com

在以下地址可找到本文档的最新(英文)版本:

其他语言版本:

中文。文本间隔:

# 在每一行后面增加一空行。

sed g# 将原来的所有空行删除并在每一行后面增加一空行。

# 这样在输出的文本中每一行后面将有且只有一空行。

sed '/d;g'

# 在每一行后面增加两行空行。

sed 'g;g'

# 将第一个脚本所产生的所有空行删除(即删除所有偶数行)

sed 'n;d'

# 在匹配式样“regex”的行之前插入一空行。

sed '/regex/'

# 在匹配式样“regex”的行之后插入一空行。

sed '/regex/g'

# 在匹配式样“regex”的行之前和之后各插入一空行。

sed '/regex/'编号:

# 为文件中的每一行进行编号(简单的左对齐方式)。这里使用了“制表符”

# (tab,见本文末尾关于'\t'的用法的描述)而不是空格来对齐边缘。

sed = filename | sed 'n;s//\t/'

# 对文件中的所有行编号(行号在左,文字右端对齐)。

sed = filename | sed 'n; ss/ *n/\1 /'

# 对文件中的所有行编号,但只显示非空白行的行号。

sed '/filename | sed '/n; s// /

# 计算行数 (模拟 "wc -l")

sed -n '$

文本转换和替代:

# unix环境:转换dos的新行符(cr/lf)为unix格式。

sed 's假设所有行以cr/lf结束。

sed 's/^m在bash/tcsh中,将按ctrl-m改为按ctrl-v

sed 's/\x0dssed、gsed 3.02.80,及更高版本。

# unix环境:转换unix的新行符(lf)为dos格式。

sed "s/$/echo -e \在ksh下所使用的命令。

sed 's/$'echo \在bash下所使用的命令。

sed "s/$/echo \在zsh下所使用的命令。

sed 's/$/rgsed 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///"infile >outfile # unxutils sed v4.0.7 或更高版本。

tr -d outfilegnu tr 1.22 或更高版本。

# 将每一行前导的“空白字符”(空格,制表符)删除。

# 使之左对齐。

sed 's/^[t见本文末尾关于'\t'用法的描述。

# 将每一行拖尾的“空白字符”(空格,制表符)删除。

sed 's/[ t见本文末尾关于'\t'用法的描述。

# 将每一行中的前导和拖尾的空白字符删除。

sed 's/^[t]*/s/[ t]*$

# 在每一行开头处插入5个空格(使全文向右移动5个字符的位置)

sed 's

# 以79个字符为宽度,将所有文本右对齐。

sed -e :a -e 's/^.ta' # 78个字符外加最后的一个空格。

# 以79个字符为宽度,使所有文本居中。在方法1中,为了让文本居中每一行的前。

# 头和后头都填充了空格。 在方法2中,在居中文本的过程中只在文本的前面填充。

# 空格,并且最终这些空格将有一半会被删除。此外每一行的后头并未填充空格。

sed -e :a -e 's/^.ta方法1

sed -e :a -e 's/^.ta' -e 's/\(1/\1/' # 方法2

# 在每一行中查找字串“foo”,并将找到的“foo”替换为“bar”

sed 's/foo/bar只替换每一行中的第一个“foo”字串。

sed 's/foo/bar/4只替换每一行中的第四个“foo”字串。

sed 's/foo/bar/g将每一行中的所有“foo”都换成“bar”

sed 's/\(foo\(.foo\)/1bar\2/' # 替换倒数第二个“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/red/g;s/puce/red/g' #对多数的sed都有效。

gsed 's/scarlet\|ruby\|puce/red/g只对gnu sed有效。

# 倒置所有行,第一行成为最后一行,依次类推(模拟“tac”)。

# 由于某些原因,使用下面命令时hhsed v1.5会将文件中的空行删除。

sed '1!g;h;$!d方法1

sed -n '1!g;h;$p方法2

# 将行中的字符逆序排列,第一个字成为最后一字,……模拟“rev”)

sed '/n/!g;sn\)/2\1/;/d;s/./

# 将每两行连接成一行(类似“paste”)

sed '$n;s// /

# 如果当前行以反斜杠“\”结束,则将下一行并到当前行末尾。

# 并去掉原来行尾的反斜杠。

sed -e :a -e '/n; s/\//;ta'

# 如果当前行以等号开头,将当前行并到上一行末尾。

# 并以单个空格代替原来行头的“=”

sed -e :a -e '$n;s/=/ ta' -e 'p;d'

# 为数字字串增加逗号分隔符号,将“1234567”改为“1,234,567”

gsed ':a;s/\b[0-9]\\tagnu sed

sed -e :a -e 's/\(0-9]\)0-9]\\1,\2/;ta' # 其他sed

# 为带有小数点和负号的数值增加逗号分隔符(gnu sed)

gsed -r ':a;s/(^0-9.])0-9]+)0-9])/1\2,\3/g;ta'

# 在每5行后增加一空白行 (在第5,10,15,20,等行后增加一空白行)

gsed '0~5g只对gnu sed有效。

sed 'n;n;n;n;g其他sed

选择性地显示特定行:

# 显示文件中的前10行 (模拟“head”的行为)

sed 10q

# 显示文件中的第一行 (模拟“head -1”命令)

sed q# 显示文件中的最后10行 (模拟“tail”)

sed -e :a -e '$q;n;11,$d;ba'

# 显示文件中的最后2行(模拟“tail -2”命令)

优化训练模式

优化训练模式提高训练效率。一一教学技能微格训练模式实验报告。潘魁英王雪光。一 问题综述。21世纪综合国力的竞争实质是人才的竞争,而人。才的竞争,归根结蒂是教育的竞争。要办好教育,教师。是关键,师范教育则是关键之关键。所以师范学校必。须全面提高师范生的综合素质,尤其是要改善 提高。师范生的课堂教学技能...

四年级简单行程应用题训练

1 一辆汽车每小时行驶50千米,从甲城到乙城行驶了18小时,从甲城到乙城的路程是多少?2 小芬上学步行的速度是70米 分,她从家到学校要走19分钟。小玲上学步行的速度是75米 分,她从家到学校要走20分钟。两人上学各要走多少米?若小芬家 小玲家及学校在同一路上,从小芬家到小玲家要走多少米?3 一辆汽...

作文模式训练反思

刊 益华。目前的新材料作文写作中,绝大部分同学选择写作议有优劣高下之分,各种模式均有其优点与局限性 并列式 而几乎所有的议 又长着同一个模样。综观历年分论点明确,结构清晰,缺点是可以无限制并列下去,容。高考优作,几乎看不出有什么模式,又似乎一篇文章中有易做成空洞的文化大散文 正反对照式从正反两个层面...