如何在linux中删除特定的“] [”

Posted

技术标签:

【中文标题】如何在linux中删除特定的“] [”【英文标题】:How to remove specific "][" in 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;' ''

最好的问候, 萨拉

【问题讨论】:

在这样的情况下,我们鼓励用户以代码的形式添加他们的努力,所以请在您的问题中添加相同的内容,然后让我们知道。 【参考方案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 将打印当前行。

【讨论】:

以上是关于如何在linux中删除特定的“] [”的主要内容,如果未能解决你的问题,请参考以下文章

如何从linux中的多个文件中删除特定行?

Linux中如何杀掉进程中包含特定字符串的所有进程

linux下如何获得特定字符串前后几行文本

如何批量删除Redis下特定pattern的keys?

如何在 postgres 中删除特定模式中的每个表?

linux-user-group添加与删除