【问题标题】:Sed - Replacing text string containing parentheses, commas and unspecified number of whitespacesSed - 替换包含括号、逗号和未指定数量的空格的文本字符串
【发布时间】:2020-11-14 16:54:57
【问题描述】:

假设一个字母数字文本字符串包含一个由关键字、括号和逗号组成的部分,以及紧跟在部分或全部逗号之后的换行符和未指定数量的空格。如何用bash 中的简单逗号替换文本字符串中的这样一个部分(最好使用sed)?

例子:

$ cat have.txt
foo (keyword(00001..00002),keyword(00003..00004),
   keyword(00005..00006),keyword(00007..00008)) foo 
$ cat want.txt 
foo (keyword(00001..00002,00003..00004,00005..00006,00007..00008)) foo

尝试:

$ sed 's/),keyword(/,/g' have.txt
foo (keyword(00001..00002,00003..00004),
   keyword(00005..00006,00007..00008)) foo

(而且,是的,我知道可以通过[[:space:]] 捕获空格。)

【问题讨论】:

    标签: regex string bash sed replace


    【解决方案1】:
    cat >> edrep.txt << EOF
    
    2s/   //
    %s/(//g
    %s/)//g
    %s/keyword//g
    1s/00001/\(keyword\(00001/
    2s/8/8))/
    1,2j
    wq
    EOF
    
    ed -s file.txt < edrep.txt
    

    我知道这个问题已经得到解答,但我还是想发布这个解决方案。这里的人可能会认为它很hackish;但关键是你可以像猴子一样用 ed 绕过文本文件,而且我不知道有任何其他程序可以让你达到同样的程度。

    【讨论】:

      【解决方案2】:

      使用 GNU sed:

      sed -z 's/),\s*keyword(/,/g' file
      

      使用-z,您将能够匹配换行符,\s* 将匹配零个或多个空格,包括这些换行符。

      要实际修改文件使用

      sed -z -i 's/),\s*keyword(/,/g' file
      

      【讨论】:

        猜你喜欢
        • 2020-06-12
        • 1970-01-01
        • 2015-12-13
        • 2017-08-04
        • 1970-01-01
        • 2019-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多