用sed、tr、col对文本进行处理 z

17 篇文章 0 订阅

利用sed向源代码中增加注释,test.sh源代码内容:
$ cat test.sh
#!/bin/sh
#Just for test by ELM
#

elm-start
ls
elm-end

echo "all done"
使用sed命令来注释elm-start和elm-end之间的内容:
$ sed -i '/elm-start/,/elm-end/s/^/#/' test.sh; cat test.sh
#!/bin/sh
#Just for test by ELM
#

#elm-start
#ls
#elm-end

echo "all done"
命令大概意思:将标志elm-start elm-end之间的代码开头替换成#。

删除注释:
由于elm-start和elm-end属于非shell命令,所以不去掉前面的注释:
$ sed -i '/elm-start/,/elm-end/{/^#elm-/!s/^#//;}' test.sh; cat test.sh
#!/bin/sh
#Just for test by ELM
#

#elm-start
ls
#elm-end

echo "all done"
注意,如果在tcsh下使用:
% sed '/elm-start/,/elm-end/{/^#elm-//!s/^#//;}' test.sh

$ sed -n '/^ls/p;p' test.sh
#!/bin/sh
#Just for test by ELM
#

#elm-start
ls
ls
#elm-end

echo "all done"
命令把以ls开头的行输出2次,由于使用了p;p,由于第二个p不受/^ls/所在范围限制,所以对于所有输入的行都起作用。如果只想输出以ls开头的行可以使用如下命令:
$ sed -n '/^ls/p;/^ls/p' test.sh
ls
ls
或使用:
$ sed -n '/^ls/{p;p;}' test.sh
{...}结构包含了一个功能列表,指明在处理指定范围内的文本行时所要完成的操作。

使用交换保持空间表示文本:
sed将输入读取到模板空间中,但是它还提供一块缓冲(称为交换保持空间)以及对应的函数,可以将文本从一个地方移动到其他地方。其他所有的操作(诸如s和d)都是针对模板空间进行的,而不是交换保持空间。

观察以下的sed脚本:
$cat case.script
# Sed script for case insensitive search
#
# copy pattern space to hold space to preserve it
h
y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
# use a regular expression address to search for lines containing:
/test/ {
i/
vvv
a/
^^^
}
# restore the original pattern sace from the hold space
x;p
首 先,我们将上述脚本写入一个文件中,而不是直接敲在命令行里。以“#”开头的行都是注释,在执行时是被忽略的。其它的行都是代表了一个sed的命令,命令 之间用回车或者“;”分割。sed每次读取输入中的一行,对其执行全部的脚本。以下的操作就是在sed读取了一行文本之后要执行的:

h
将模板空间(当前读入的文本行)复制到交换空间中。

y/ABC/abc/
在模板空间执行,将大写字母替换成小写字母。

/test/ {....}
检查当前行,如果其中含有字符“test”,就视为匹配(忽略大小写,因为此时文本已经被全部被转成消协格式),随后执行功能列表中对应的操作。这个例子是用来将a/后i/前的文本进行高亮显示的。

x
交换模板空间和保持空间,恢复模板空间中的原始文本内容。

p
打印模板空间中的内容。

如下是测试内容:

$ cat case
heihei  test
fdasf   fdaa
fdadfdfa
fdfafa
fdaf    Test
fdadfa
end

$ sed -n -f case.script case
vvv
heihei  test
^^^
fdasf   fdaa
fdadfdfa
fdfafa
vvv
fdaf    Test
^^^
fdadfa
end

转换大小写

$ echo AbC | tr 'ABC' 'abc'
abc

转换字符

$ tr //r //n < soure > result
source是源文件,result是新文件,将source中的回车符替换成了换行符。

删除双重换行

$ tr -s //n < lines > tmp ; mv tmp lines

删除字符:

$ tr -d test < file

将制表符(tab)替换为空格(space)

如果希望将制表符替换为多个空格符,可以使用-x选项:

$ cat tabs
aa      bb      cc
$ od -x tabs
0000000 6161 6209 0962 6363 000a
0000011

$ col -x < tabs > spaces

$ cat spaces
aa      bb      cc
$ od -x spaces
0000000 6161 2020 2020 2020 6262 2020 2020 2020
0000020 6363 000a
0000023

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值