使用“\”删除多行中断的文件中的行

时间:2013-12-05 07:23:38

标签: regex linux bash unix sed

我想根据我正在搜索的字符串从文件中删除行,如下所示:

sed -i.bak '/xyz/d' "$PATH"

问题对我来说是包含该字符串的行,并用“\”分隔多行,如下所示:

this is the string im looking for xyz but there \
   are other lines \
   that are part \
   of that \
   god damn line

有一种简单的方法可以用bash / sed / regex删除整个“行”吗?

3 个答案:

答案 0 :(得分:4)

你可以说:

sed -e :a -e '/.*xyz.*\\$/N; s/\\\n//; ta' -e '/xyz/d' filename

(这会加入包含xyz的行,该行分为多个以/结尾的行,然后将其删除。)

答案 1 :(得分:3)

这可能适合你(GNU sed):

sed ':a;/\\$/{N;ba};h;s/\\\n//g;/xyz/d;g' file

这会收集多行,将它们复制到保留空间,删除分割线标记,然后删除整行,如果它包含xyz。如果该行不包含xyz,则原始分割线将被替换并打印出来。

如果首选合并所有多行,则:

sed ':a;/\\$/{N;ba};s/\s*\\\n\s*/ /g;/xyz/d' file

答案 2 :(得分:1)

因为sed一次只运行一行,所以你需要使用N命令来加入这些行。

这篇文章很好地解释了用法:How the 'N' command works in sed?