关于unix命令“sed”

时间:2013-06-06 02:44:34

标签: unix sed

我想在文本文件中进行以下替换:

原始字符串:"---a---"

替换后

"---\a---"

然后运行以下命令:

sed -r -e "s/-(a)-/-\\\1-/g" test.txt

但它没有给出正确的结果。我应该使用什么命令args?

5 个答案:

答案 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)

您必须用

替换1
sed -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 ;

这有帮助吗?