我想在文本文件中进行以下替换:
原始字符串:"---a---"
:"---\a---"
然后运行以下命令:
sed -r -e "s/-(a)-/-\\\1-/g" test.txt
但它没有给出正确的结果。我应该使用什么命令args?
答案 0 :(得分:1)
请记住,反斜杠在Bash的双引号字符串以及sed本身中都很重要。使用单引号:
sed -r -e 's/-(a)-/-\\\1-/g' test.txt
或者再次逃避反斜杠:
sed -r -e "s/-(a)-/-\\\\\\1-/g" test.txt
如果你回应字符串,你会看到发生了什么:
$ echo "s/-(a)-/-\\\1-/g"
s/-(a)-/-\\1-/g
$ echo 's/-(a)-/-\\\1-/g'
s/-(a)-/-\\\1-/g
$ echo "s/-(a)-/-\\\\\\1-/g"
s/-(a)-/-\\\1-/g
第一个(你的原文)看起来像一个字面反斜杠后跟一个文字1到sed。
答案 1 :(得分:0)
尝试sed -r -e "s/-(a)-/-\\\\\\1-/g"
或sed -r -e 's/-(a)-/-\\\1-/g'
如果您使用双引号,问题是bash会捕获\
。
答案 2 :(得分:0)
您必须用
替换1sed -r -e "s/-(a)-/-\\\a-/g" test.txt
答案 3 :(得分:0)
使用"
,您必须执行以下操作:
[jaypal:~/Temp] echo "---a---" | sed -r "s/-(a)-/-\\\\\1-/g"
---\a---
答案 4 :(得分:0)
这么多答案......
Kaizen ~/so_test
$ echo "---a---" | sed -n 's/a/\\a/p'
---\a---
因为你有一个文本文件,所以应该有以下工作:
sed -i 's/a/\\a/g' filename.txt ;
这有帮助吗?