【问题标题】:delete words between specified characters with sed使用 sed 删除指定字符之间的单词
【发布时间】:2012-07-17 05:55:10
【问题描述】:

我有一个这种格式的文件:

Word1 : "Word2" Word3

我想删除“Word2”

那么文件必须是这样的:

Word1 : Word3

我怎样才能用 sed 做到这一点?

注意:Word2 是可变的

【问题讨论】:

    标签: command-line sed


    【解决方案1】:

    如果 input_file 中没有多余的内容,只需将每个引用的短语替换为空字符串:

    sed 's/"[^"]*"//' input_file
    

    【讨论】:

    • +1,但是:严格来说,sed 应该使用基本正则表达式,所以 \+ 应该是无效的(但被许多 sed 实现所接受)。不过,我认为在这里使用* 可能会更好,因为引用的字符串可能为空。
    【解决方案2】:

    基于给定的输入。比如说,Word2 可以是任何东西,但 Word1 和 Word3 是固定的。 sed/awk oneliner 可以完成这项工作 4 u:

    kent$  echo 'Word1 : "Word2" Word3'|sed -r 's/(Word1 :) "[^"]*"( Word3)/\1\2/g' 
    Word1 : Word3
    
    
    kent$  echo 'Word1 : "Word2" Word3'|awk -F"\"" '{print $1,$3}' 
    Word1 :   Word3
    

    【讨论】:

      【解决方案3】:

      如果 file.txt 是你的文件,你可以从命令行试试这个:

      sed -e "s_: \"[a-zA-Z0-9]*\" _: _g" -i file.txt
      

      【讨论】:

      • 如果我有非拉丁字符? :) 喜欢“Версия”
      • 试试:sed -e "s_: \"[^\"]*\" _: _g" -i file.txt ;)
      【解决方案4】:

      如果 test 是您的文件,请尝试:

      # cat test | sed -r 's/\".+\"\ //'
      

      【讨论】:

        【解决方案5】:

        从命令行尝试

        $ sed -i 's/\"Word2\"//g' /path/to/file.txt
        

        【讨论】:

          猜你喜欢
          • 2012-06-28
          • 2021-11-20
          • 2022-01-14
          • 2021-05-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-08
          相关资源
          最近更新 更多