让我说这行:
Centrino Advanced-N 6205 [Taylor Peak] [0085]
我想将其更改为:
Centrino Advanced-N 6205 (Taylor Peak) [0085]
当方括号之间有字母和空格时,将方括号从[]更改为()仅 的最佳方法是什么?
[]和数字应保持不变。
答案 0 :(得分:1)
sed
在这里工作正常。
line="Centrino Advanced-N 6205 [Taylor Peak] [0085]"
echo $line | sed -E 's/\[([A-Za-z ]+)\]/(\1)/g'
-E
标志打开扩展的正则表达式(允许(...)
捕获组工作而不会与+
一起转义黑色斜线以匹配一个或多个匹配项)。
[A-Za-z ]
仅匹配字母和空格,因此不会匹配带有数字的括号(或与此相关的任何其他类型的内容)。
答案 1 :(得分:1)
echo 'Centrino Advanced-N 6205 [Taylor Peak] [0085]' | sed 's/\[\([a-zA-Z ]\+\)\]/\(\1\)/g'
正则表达式搜索大写和小写字母a到z以及矩形括号之间的空格。
此字母范围和空格用[a-zA-Z ]\+
描述。 \+
意味着至少需要发生一次。
围绕\(
和\)
。这意味着,存储在\1
中找到的内容,该内容用于s(earch)/look_for_this/replace_with_that/g(lobally)
的“替换为”部分。
最后,正则表达式由最外面的\[
和\]
完成。这些括号需要转义,以免与已经提到的字符范围混淆。
或者您像在TrebuchetMS的答案中那样做,并为自己节省了一些转义。尽管由于解释而将其留在这里。 :)