Bash sed-用字符替换方括号?
我有一个字符串,用括号括住一个字符,如下所示:Bash sed-用字符替换方括号?,bash,sed,Bash,Sed,我有一个字符串,用括号括住一个字符,如下所示: [a] 我想将括号内的字符替换为字符,因此最终结果如下所示: aaa 这是我想到的,但它不起作用: sed 's/\[ \([a-z]\) \]/\2/g' < testfile sed's/\[\([a-z]\)\]/\2/g'
[a]
我想将括号内的字符替换为字符,因此最终结果如下所示:
aaa
这是我想到的,但它不起作用:
sed 's/\[ \([a-z]\) \]/\2/g' < testfile
sed's/\[\([a-z]\)\]/\2/g'
有人能帮我解释一下为什么我的命令不起作用吗?我想你遗漏了一些基本概念。首先,让我们复制一个字符
$ echo a | sed -r 's/(.)/\1\1/'
aa
括号表示组,\1
表示第一个组
现在,匹配方括号中的字符并将其三倍
$ echo [a]b | sed -r 's/\[(.)\]/\1\1\1/'
aaab
您需要转义方括号字符,因为它们在正则表达式中有特殊意义。关键是你必须用括号括起你感兴趣的正则表达式,并用
\{number}
符号以相同的顺序引用它们。你的父亲的问题sed的/\[\([a-z]\])\]/\2/g'
:
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'
或
输出为:
aaa
请尝试以下代码:
$ echo "[a]" | sed 's/\[\([a-zA-Z]\)\]/\1\1\1/g'
或
输出:
aaa
图案中的空格是用来做什么的?
\2
应该是哪个捕获(来自模式)?您将用一个字符替换五个字符。这就是你的意思吗?去掉空格并将\1
三倍,即:sed's/\[\([a-z]\)\]/\1\1\1/g'
sed-e's/\[\(.\)\]/\1\1/g'
$ echo "[a]" | sed -r 's/\[([a-zA-Z])\]/\1\1\1/g'
aaa