【发布时间】:2014-01-24 11:53:31
【问题描述】:
通常使用 Sed(或 Perl 或 Ruby)替换文件中的内容:
sed -i.bak 's/\s+\\{/ {/g' some.code
在此示例中,我想删除代码中花括号之前的换行符,因为它们不是我的编程“方言”(对于我使用的任何语言)的一部分,并且会使代码阅读变得不那么自然和流畅。但基本问题是如何匹配跨行的模式,而不是文件任何给定行内的模式。
现有的看似相似的 SO 问题并没有具体解决如何跨越一般的行,而是针对用户试图解决的特定问题提供解决方案,有时通过变通方法代替。
我在 Sed 手册页中四处寻找,找不到任何开关来执行我所描述的操作。不过,也许我只是没有使用正确的关键字。
【问题讨论】:
-
不幸的是 sed AFAIK 不能很好地处理换行符:stackoverflow.com/questions/1251999/… 其他一些工具可能会更好 :)
-
使用 Perl 和
mregex modifier 很容易。 -
@nwellnhof:如果你用 Perl 给出答案,我会接受它......我知道我以前见过那个开关,我只是没有意识到它在 Perl 中但在 Sed 中缺失.
-
sed可以直接多行工作,先看这个网址:thegeekstuff.com/2009/12/…,如果你能提供示例输入文件,我们可以直接提供解决方案。