gpt4 book ai didi

linux - 删除每行中的第一个方括号及其内容(bash)

转载 作者:太空宇宙 更新时间:2023-11-04 04:55:24 26 4
gpt4 key购买 nike

我有一个文件try.txt看起来像这样:

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

如果我在文件的一行开头有这个模式:(SOME_PRINT): [<word>] (其中 <word> 仅是字母和数字的组合),所以我想将其替换为 (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

你能解释一下为什么有 [b]消失了?

最佳答案

只需更改您的正则表达式,如下所示:

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

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

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

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

另一个解决方案是从字符中排除右方括号。

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

关于linux - 删除每行中的第一个方括号及其内容(bash),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47817347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com