我有一个字符串,括号中包含一个字符,如:
[a]
我想取括号中的字符并用字符替换括号,所以最终结果如下:
aaa
这是我提出的,但它不起作用:
sed 's/\[ \([a-z]\) \]/\2/g' < testfile
有人可以帮助我,解释为什么我的命令不起作用吗?
答案 0 :(得分:0)
我认为你错过了一些基本概念。首先让我们复制一个char
$ echo a | sed -r 's/(.)/\1\1/'
aa
括号表示组,\1
表示第一组
现在,要匹配方括号中的字符并将其加倍。
$ echo [a]b | sed -r 's/\[(.)\]/\1\1\1/'
aaab
你需要转义方括号字符,因为它们在正则表达式中有特殊含义。关键是你必须在括号中括起你感兴趣的正则表达式,并用\{number}
表示法以相同的顺序引用它们。
答案 1 :(得分:0)
您的模式sed 's/\[ \([a-z]\) \]/\2/g' < testfile
的问题:
1) The pattern has only one group \([a-z]\), so \2 is invalid;
2) The pattern contains space, there is no match found;
3) To replace brackets, you need to capture them in a group.
我的想法是,捕获模式中的所有组,并将其替换为\2\2\2
:
echo "[a]" | sed 's/\(\[\)\([a-z]\)\(\]\)/\2\2\2/g'
或者
echo "[a]" | sed 's/\(.\)\(.\)\(.\)/\2\2\2/g'
输出结果为:
aaa
答案 2 :(得分:0)
请尝试以下代码:
$ echo "[a]" | sed 's/\[\([a-zA-Z]\)\]/\1\1\1/g'
或
$ echo "[a]" | sed -r 's/\[([a-zA-Z])\]/\1\1\1/g'
<强>输出:强>
aaa