【问题标题】:Replace Newline And Following Whitespaces Until A Specific String In A File替换换行符和后面的空格,直到文件中的特定字符串
【发布时间】:2013-02-06 14:17:26
【问题描述】:

如何使用单行 sedperl 替换换行符和后面的空格直到特定字符串?

例如我想在文件中的字符串“XYZ”之前替换换行符和后面的空格。所有以单词 'XYZ' 开头的行都将附加在上一行之前(带有一个额外的空格)。

lorem ipsum dolor 坐 amet XYZ lorem ipsum dolor sit amet XXX lorem ipsum dolor sit amet DDD lorem ipsum dolor sit amet XYZ lorem ipsum dolor sit amet cccc lorem ipsum dolor 坐 amet XYZ lorem ipsum dolor sit amet

输出将是

lorem ipsum dolor 坐 amet XYZ lorem ipsum dolor 坐 amet XXX lorem ipsum dolor sit amet DDD lorem ipsum dolor sit amet XYZ lorem ipsum dolor sat amet cccc lorem ipsum dolor 坐 amet XYZ lorem ipsum dolor 坐 amet

【问题讨论】:

  • 这不是作业。只是我很少在终端上编码,我需要一些瑞士刀来做某事。

标签: perl unix sed


【解决方案1】:

试试这个:

s/[\s\n]+XYZ/ XYZ/gsm;

【讨论】:

    【解决方案2】:
    perl -0777pe's/\n\s*(?=XYZ)/ /g' file
    

    -0777 将整个文件视为一行。

    写入的命令将输出到 STDOUT,您可以随意重定向。 -i~-i 将分别编辑“就地”,有和没有备份。

    【讨论】:

    • 啊,原来我错过了-0777。我尝试了类似的正则表达式,但没有达到我想要的效果。非常感谢!
    • BEGIN { $/ = undef; } 会更详细地完成这个技巧。
    猜你喜欢
    • 2015-08-03
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 2019-06-13
    • 1970-01-01
    • 2015-10-01
    • 2021-01-02
    相关资源
    最近更新 更多