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

Cod*_*irl 0 regex awk sed find

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

Name:[Sara,Jane,John]
FamilyName: [Alexandr,Walter,Waze]
Number: [21][44]
Run Code Online (Sandbox Code Playgroud)

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

Name:[Sara,Jane,John]
FamilyName: [Alexandr,Walter,Waze]
Number: [2144]
Run Code Online (Sandbox Code Playgroud)

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

find . -name "*.txt" |xargs sed -i.bak -e 's/[][]//g;' '{}'
Run Code Online (Sandbox Code Playgroud)

最好的问候,萨拉

Sun*_*eep 6

$ sed '/Number/ s/]\[//' ip.txt 
Name:[Sara,Jane,John]
FamilyName: [Alexandr,Walter,Waze]
Number: [2144]
Run Code Online (Sandbox Code Playgroud)
  • /Number/ 匹配行包含 Number
    • 对于这样的行,s/]\[//将删除第一次出现][
    • [ 需要转义以匹配它的字面意思

[][]将匹配][字符一次。使用g标志将删除所有方括号。在这个例子中,因为你要匹配你不应该使用字符类],并[在那个特定的顺序。

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


Rav*_*h13 5

您能否仅根据您显示的示例尝试以下操作。

awk '/Number/{gsub(/]\[/,"")} 1' Input_file
Run Code Online (Sandbox Code Playgroud)

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