一起学习sed(三)

首先看下面一段凌乱的Python代码

这是从网上拷贝的一段python代码的开头部分,格式非常混乱,有行号,有过多的空行和空格,这种直接拷贝的代码是无法直接运行的,需要你手动把这些无用的符号删除,对于成百上千行的代码,如果手动删除太多麻烦,即便你使用一些文本编辑器的替换功能,也未必能够很好的达到你的目的。这个时候就是sed大显身手的时候了。

删除空白行(对于一个Python代码块,空白行会产生错误)

删除行号,使代码左对齐

删除备注(以#号开头的行)

上述代码通过-e参数指定了4条sed命令,分别删除每一行开头的前三个字符(行号)、删除空白行、删除以#号开头的备注行(\s表示空格符)、删除每行第一个字符使左对齐。随后就得到了标准的Python代码格式.

{}:嵌套sed命令

对于更为复杂的sed命令,可以使用大括号将不同的命令分组,比如还是上面Python代码,如果想把4-100行之间的代码进行整理,则可以先指定行范围,然后使用大括号将不同的sed命令组合起来。

r:读入文件

这儿需要两个文件做演示,新建另一个文本文件example1.txt,如下

如果我们要在example.txt文件的第二行开始插入该文件exemple1.txt

如果要在example.txt文件的最后一行插入

如果要在数字8的行后面插入该文件

a或i:添加字符串行

比如我们要在example.txt文件的第二行之后(a)或之前(i)添加一行“THIS is the middle of the file”

a和i都可以完成添加行,不同的是,a(append)是在指定行之后添加i(insert)是在指定行之前添加

c:修改行

比如我们要把example.txt文件的第二行修改成“It is the first day of 2019”,可以使用c(change)参数来修改。

“=”:输出行号

之前学过awk,结合”wc -l”,可以输出一个文件的行数。

当然更简单的方法是在sed中使用“=”输出行号。用法如下:

我们还可以筛选出符合一定条件的行,比如输出以“H”开头行的行号

y:转换字符

比如把所有的“a”转换成“A”:

l:显示控制符

在寻找bug的时候特别有用,把一般不显示的文本控制符显示出来。

在每一行的末尾都加上了“$“,表示该行结束。

****百读不如一练 ****

===== THE END ====

参考资料:http://www.grymoire.com/Unix/Sed.html#uh-30

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190104G07HYH00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券