【问题标题】:Delete line containing a specific string starting with dollar sign using unix sed使用 unix sed 删除包含以美元符号开头的特定字符串的行
【发布时间】:2016-04-01 06:48:50
【问题描述】:

我对 Unix 很陌生。

我有一个参数文件Parameter.prm,其中包含以下几行。

$$ErrorTable1=ErrorTable1
$$Filename1_New=FileNew.txt
$$Filename1_Old=FileOld.txt
$$ErrorTable2=ErrorTable2
$$Filename2_New=FileNew.txt
$$Filename2_Old=FileOld.txt
$$ErrorTable3=ErrorTable3
$$Filename3_New=FileNew.txt
$$Filename3_Old=FileOld.txt

我想得到输出

$$ErrorTable1=ErrorTable1
$$ErrorTable2=ErrorTable2
$$ErrorTable3=ErrorTable3

基本上,我需要删除以$$Filename开头的行。

由于$ 是关键字,我无法将其解释为字符串。如何使用 sed 完成此任务?

【问题讨论】:

    标签: unix sed


    【解决方案1】:

    使用 sed:

    $ sed '/$$Filename/d' infile
    $$ErrorTable1=ErrorTable1
    $$ErrorTable2=ErrorTable2
    $$ErrorTable3=ErrorTable3
    

    /$$Filename/ 部分是地址,即,对于与此匹配的所有行,将执行其后面的命令。命令是d,删除该行。不匹配的行按原样打印。

    【讨论】:

      【解决方案2】:

      基于模式搜索从文本文件中提取信息是grep 的工作:

      grep ErrorTable file
      

      甚至

      grep -F '$$ErrorTable' file
      

      -F 告诉 grep 将搜索词视为固定字符串而不是正则表达式。


      为了回答您的问题,如果正则表达式需要搜索在正则表达式语言中具有特殊含义的字符,您需要对它们进行转义:

      grep '\$\$ErrorTable' file
      

      【讨论】:

      • 谢谢!但我只需要删除$$Filename。我需要将$ 识别为字符串的模式,并且我到了这里。我使用了代码sed "/\$\$Filename/ d"
      • 使用grep -Fv '$$Filename' file-v 否定匹配
      猜你喜欢
      • 2012-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多