我想用sed替换一些字符,但仅在满足某些条件的情况下才能替换。
因此,如果字符串中的某处出现\t
,则应将其替换为\
,即。使用反斜杠和物理选项卡。
如果发生\\t
,则不应该做任何事情。
逻辑将是替换\t
之前没有的每个\
,但我不确定如何编写该正则表达式。对那些东西并不是很擅长sed
。
答案 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'