0

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

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

替换后:"---\a---"

我运行以下命令:

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

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

4

5 回答 5

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。

于 2013-06-06T02:49:39.607 回答
0

尝试sed -r -e "s/-(a)-/-\\\\\\1-/g"sed -r -e 's/-(a)-/-\\\1-/g'

问题是,\如果您使用双引号,则 bash 会捕获该问题。

于 2013-06-06T02:49:45.517 回答
0

"您一起必须执行以下操作:

[jaypal:~/Temp] echo "---a---" | sed -r "s/-(a)-/-\\\\\1-/g"
---\a---
于 2013-06-06T02:50:00.510 回答
-1

您必须将 1 替换为

sed -r -e "s/-(a)-/-\\\a-/g" test.txt
于 2013-06-06T02:49:54.963 回答
-1

这么多答案......

Kaizen ~/so_test 
$ echo "---a---" | sed -n 's/a/\\a/p'
---\a---

由于您有一个文本文件,因此以下内容应该可以工作:

  sed -i 's/a/\\a/g' filename.txt ;

这有帮助吗?

于 2013-06-06T02:57:57.353 回答