我想在文本文件中进行以下替换:
原始字符串:"---a---"
替换后:"---\a---"
我运行以下命令:
sed -r -e "s/-(a)-/-\\\1-/g" test.txt
但它没有给出正确的结果。我应该使用什么命令参数?
请记住,反斜杠在 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。
尝试sed -r -e "s/-(a)-/-\\\\\\1-/g"
或sed -r -e 's/-(a)-/-\\\1-/g'
问题是,\
如果您使用双引号,则 bash 会捕获该问题。
与"
您一起必须执行以下操作:
[jaypal:~/Temp] echo "---a---" | sed -r "s/-(a)-/-\\\\\1-/g"
---\a---
您必须将 1 替换为
sed -r -e "s/-(a)-/-\\\a-/g" test.txt
这么多答案......
Kaizen ~/so_test
$ echo "---a---" | sed -n 's/a/\\a/p'
---\a---
由于您有一个文本文件,因此以下内容应该可以工作:
sed -i 's/a/\\a/g' filename.txt ;
这有帮助吗?