shell脚本:sed放置不必要的括号

时间:2014-03-09 17:11:38

标签: shell sed

以下内容应仅匹配字母,如果找到它们,则应在其周围加上括号。我不知道为什么它会把它们放在下面的数字之间。以下结果在bash脚本中。

$ echo '13123213'|sed 's/[a-z]*/(&)/g'
()1()3()1()2()3()2()1()3()

2 个答案:

答案 0 :(得分:1)

你走了:

echo '13123213'|sed 's/[0-9]/(&)/g'
(1)(3)(1)(2)(3)(2)(1)(3)

您确实尝试匹配[a-z],但您没有任何字母,因此请使用[0-9]代码

或者如果你想在字母周围加上括号:

echo '1312a32z13'|sed 's/[a-z]/(&)/g'
1312(a)32(z)13

可以使用此awk

echo '13123213'| awk '{gsub(/[0-9]/,"(&)")}1'
(1)(3)(1)(2)(3)(2)(1)(3)

echo '13123213'| awk '{for (i=1;i<=NF;i++) $i="("$i")"}1' FS="" OFS=""
(1)(3)(1)(2)(3)(2)(1)(3)

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed 's/[[:alpha:]]\+/(&)/g' file

或:

sed 's/[[:alpha:]]\{1,\}/(&)/g' file

或:

sed 's/[[:alpha:]][[:alpha:]]*/(&)/g' file