用sed替换字符

时间:2013-03-19 14:18:44

标签: regex replace sed

我想用sed替换一些字符,但仅在满足某些条件的情况下才能替换。

因此,如果字符串中的某处出现\t,则应将其替换为\,即。使用反斜杠和物理选项卡。 如果发生\\t,则不应该做任何事情。

逻辑将是替换\t之前没有的每个\,但我不确定如何编写该正则表达式。对那些东西并不是很擅长sed

3 个答案:

答案 0 :(得分:1)

尝试:

sed -r 's/^\\t|([^\\])\\t/\1\t/g' file

示例:

$ cat file
hello\tworld
foo\\tbar
\tfirst
last\t
last\\t
\\tfirst


$ sed -r 's/^\\t|([^\\])\\t/\1\t/g' file
hello   world
foo\\tbar
        first
last
last\\t
\\tfirst

答案 1 :(得分:0)

一种方式:

sed 's/[^\\]\\t/\\      /' file

在替换部分中,它是'2反斜杠+ Ctrl-V + Tab'

答案 2 :(得分:-1)

您可以使用此sed命令:

在Mac上:

sed -E 's/(^|[^\\])\\t/\1   /g'

或者在Linux上:

sed -r 's/(^|[^\\])\\t/\1   /g'

如果您可以使用perl,那么您也可以使用负面的背后隐藏

perl -pe 's#(?<!\\)\\t#       #g'