【问题标题】:How to remove specific "][" in linux如何在linux中删除特定的“] [”
【发布时间】:2020-10-28 13:25:36
【问题描述】:

我有很多括号的文本文件,如下所示:

Name:[Sara,Jane,John]
FamilyName: [Alexandr,Walter,Waze]
Number: [21][44]

我只想删除 Number 中的 ][ 并使文件如下所示:

Name:[Sara,Jane,John]
FamilyName: [Alexandr,Walter,Waze]
Number: [2144]

下面的代码删除所有括号并且无法正常工作,我真的可以帮助我修改此代码吗?

find . -name "*.txt" |xargs sed -i.bak -e 's/[][]//g;' '{}'

最好的问候, 萨拉

【问题讨论】:

  • 在这样的情况下,我们鼓励用户以代码的形式添加他们的努力,所以请在您的问题中添加相同的内容,然后让我们知道。

标签: regex awk sed find


【解决方案1】:
$ sed '/Number/ s/]\[//' ip.txt 
Name:[Sara,Jane,John]
FamilyName: [Alexandr,Walter,Waze]
Number: [2144]
  • /Number/ 匹配包含 Number 的行
    • 对于这样的行,s/]\[// 将删除][ 的第一次出现
    • [ 需要转义以匹配它的字面意思

[][] 将匹配 ][ 字符一次。使用g 标志将删除所有方括号。在此示例中,您不应使用字符类,因为您希望按特定顺序匹配 ][

再举一个例子,删除foo,你需要使用s/foo//而不是s/[foo]//

【讨论】:

    【解决方案2】:

    您能否尝试以下操作,仅基于您显示的示例。

    awk '/Number/{gsub(/]\[/,"")} 1' Input_file
    

    解释: /Number/ 正在当前行中寻找字符串 Number,如果找到;然后使用gsub][ 全局替换为NULL。 1 将打印当前行。

    【讨论】:

      猜你喜欢
      • 2021-04-15
      • 2015-04-24
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 2021-12-16
      相关资源
      最近更新 更多