【问题标题】:sed command to delete the lines with pattern "></" and "/>"sed 命令删除带有模式 "></" 和 "/>" 的行
【发布时间】:2013-10-09 12:58:51
【问题描述】:

我正在尝试使用 sed 命令删除文件中具有 "&gt;&lt;/""/&gt;" 模式的行

sed -i '/\/>/d' $1       --> Works fine
sed -i '/>/</\//d' $1    --> Error=>   sed: -e expression #1, char 4: unknown command: `<'

谁能为第二个提出解决方案?

如果我可以在一个 sed 命令中结合两种模式检查?

【问题讨论】:

  • 因为你有带有/的字符串,你可以考虑使用另一个sed分隔符:sed -i 's#something#other thing#g也被接受。
  • 双转义 `\`。在它进入正则表达式之前,它应该被转义为 shell。
  • 我认为,命令 sed -i 's#something#other thing#g 用于将模式 'something' 替换为 'other thing'。但我的要求是删除包含模式的行。还有其他建议吗?

标签: sed


【解决方案1】:

要删除包含您可以执行的模式的行:

$ grep -ve '></' -e '/>' file
1
2
3

或者只删除模式:

$ sed -r 's%(></)|(/>)%%g' file
1
 and 
2

3
foo  bar

输入文件在哪里:

$ cat file
1
></ and />
2
></
3
foo /> bar

【讨论】:

    【解决方案2】:

    尝试以下方法:

    sed -i '#></|/>#d' $1
    

    您应该考虑使用与/ 不同的分隔符,例如# 当您在搜索模式中有 /

    【讨论】:

    • 您的优先级不正确&gt;&lt;/|/&gt; 您需要括号(&gt;&lt;/)|(/&gt;) 当前您删除包含模式&gt;&lt;/&gt; 的行,因为/|// 相同。
    • 我认为@sudo_O 是对的……您需要确保“OR 符号两侧的内容”是您要删除的整个表达式。
    • 是的,我发现上面的代码有问题。试试这个sed -i '/&gt;&lt;\//d';/\/&gt;/d' $1
    【解决方案3】:

    终于搞定了。代码如下。 sed -i '//>/d' $1 sed -i '/>/d' $1 谢谢大家。

    【讨论】:

      【解决方案4】:

      你可以试试这个。我发现他工作正常

      sed -i '/><\//d';/\/>/d' $1
      

      它将删除所有包含&gt;&lt;//&gt;的行。

      【讨论】:

        【解决方案5】:

        这可能对你有用:

        sed -i -e '\#></#d' -e '\#/>#d' file
        

        【讨论】:

          猜你喜欢
          • 2016-10-07
          • 1970-01-01
          • 2021-12-11
          • 1970-01-01
          • 1970-01-01
          • 2011-03-21
          • 2018-08-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多