【问题标题】:Sed: Remove line from txt file? [duplicate]Sed:从 txt 文件中删除行? [复制]
【发布时间】:2023-10-14 16:20:01
【问题描述】:

如何从文本文件中删除“name['todo']['remove'] = 3456”行?

[test.txt]
name['myname']['test'] = 12
name['todo']['remove'] = 3456
name['todo']['remove']['inspection'] = 34

我目前的方法没有按预期工作。该行仍在我的文件中。

sed -i "name\['todo'\]\['remove'\]" test.txt

错误信息是“sed: -e expression #1, char 2: extra characters after command”

【问题讨论】:

    标签: sed


    【解决方案1】:

    一个简单的 grep -vF 在这里可以正常工作,它使用 fixed string 进行匹配,而无需转义特殊的正则表达式字符:

    grep -ivF "name['todo']['remove'] " file
    
    [test.txt]
    name['myname']['test'] = 12
    name['todo']['remove']['inspection'] = 34
    

    【讨论】:

      【解决方案2】:

      你可以使用

      sed -i "/name\['todo']\['remove'] =/d" test.txt
      

      请注意,该模式用 / 正则表达式分隔符包裹,d 表示匹配的行将被删除。

      查看online demo

      s="[test.txt]
      name['myname']['test'] = 12
      name['todo']['remove'] = 3456
      name['todo']['remove']['inspection'] = 34"
      sed "/name\['todo']\['remove'] =/d" <<< "$s"
      

      屈服

      [test.txt]
      name['myname']['test'] = 12
      name['todo']['remove']['inspection'] = 34
      

      如果你想确保只匹配= 之后的整行数字,你可以使用"/^name\['todo']\['remove'] = [0-9]*$/d" 命令和sed

      【讨论】:

        最近更新 更多