删除每行中的第一个方括号(bash)

时间:2017-12-14 15:50:59

标签: linux bash sed

我有一个文件try.txt,如下所示:

(SOME_PRINT): [a] content
(SOME_PRINT): [a] [b] content

如果我在文件的一行的开头有这个模式:(SOME_PRINT): [<word>](其中<word>只是字母和数字的组合),所以我想用{{替换它' 1}}。
对于上面的文件,我想找到一个命令,它的执行将使文件成为:

(OTHER_PRINT):

我尝试运行(OTHER_PRINT): content (OTHER_PRINT): [b] content ,并获得此输出:

sed -r -i 's/^\(SOME_PRINT\)\: \[.*\] /\(OTHER_PRINT\)\: /' try.txt

你能解释为什么(OTHER_PRINT): content (OTHER_PRINT): content 消失了吗?

1 个答案:

答案 0 :(得分:1)

只需改变你的正则表达式:

sed -r -i 's/^\(SOME_PRINT\)\: \[[a-zA-Z0-9]\] /\(OTHER_PRINT\)\: /' try.txt

您的错误是您的正则表达式的这一部分不够精确:\[.*\]

[a] [b]可以通过\[.*\]

捕获

解决方法是仅指定方括号中可以找到的字符。正如您所说的只有字母数字字符,这可以通过此选择器完成:[a-ZA-Z0-9]

另一种解决方案是从字符中排除结束方括号。

我经常使用https://regex101.com/尝试我的正则表达式。它非常酷,易于理解。