首页 > 解决方案 > Bash:如果只有字母,如何仅替换括号之间的内容

问题描述

假设我有这条线:

Centrino Advanced-N 6205 [Taylor Peak] [0085]

我想将其更改为:

Centrino Advanced-N 6205 (Taylor Peak) [0085]

当括号之间有字母和空格时,将括号从 [ ] 更改为 ( ) 的最佳方法是什么?

带有数字的 [ ] 应该保持不变。

标签: bashmacossed

解决方案


sed在这里工作正常。

line="Centrino Advanced-N 6205 [Taylor Peak] [0085]"
echo $line | sed -E 's/\[([A-Za-z ]+)\]/(\1)/g'

-E标志打开扩展正则表达式(允许(...)捕获组工作而无需转义黑斜线以及+匹配一个或多个事件)。

[A-Za-z ]将仅匹配字母和空格,因此不会匹配带有数字的括号(或任何其他类型的内容)。


推荐阅读