Regex 经济及社会发展局局长加入“额外”一词\&引用;要制表符的字符

Regex 经济及社会发展局局长加入“额外”一词\&引用;要制表符的字符,regex,bash,sed,Regex,Bash,Sed,我遇到了一个问题,sed在我的命令中添加了一个额外的字符。希望这是件容易的事,但我看不出问题所在。我正在使用OSX和gsed,但我认为同样的问题也会出现在Linux上 以下是我正在运行的命令: gsed -i "/^bar/ a /\t test" test.yml 下面是test.yml文件的外观: foo bar foobar 运行上述sed命令后,test.yml如下所示: foo bar / test foobar 我尝试了上述sed命令的几种变体(\t,/\t,\/t,等

我遇到了一个问题,sed在我的命令中添加了一个额外的字符。希望这是件容易的事,但我看不出问题所在。我正在使用OSX和gsed,但我认为同样的问题也会出现在Linux上

以下是我正在运行的命令:

gsed  -i "/^bar/ a /\t test" test.yml
下面是
test.yml
文件的外观:

foo
bar
foobar
运行上述sed命令后,
test.yml
如下所示:

foo
bar
/    test
foobar

我尝试了上述sed命令的几种变体(
\t
/\t
\/t
,等等),但它们似乎都在输出文件中产生了额外的
/
。为什么此命令会添加一个额外的
/
字符?如何解决此问题?

我不确定gsed是否与sed不同,但在sed中,必须在替换字符串的开头添加一个“s”:

> sed  -i "s/^bar/ a /\t test" test.yml

foo
a       test
foobar

将带有文本的行附加到图案空间的命令是

a \
text
在GNU sed中,它也在同一行上工作,如
a\text
。你可以使用

sed  -i 's/^bar/ a \ \t test' test.yml

这两种方法都适用于GNU sed


即使不是必需的,我也使用单引号来避免shell特定字符的扩展。

命令
a\
(反斜杠)?它不是替换字符串,而是地址。问题是拆分到新行。我没有使用任何替代品,但其余的都有效。@jmreicha真的吗?不是
/
vs
\
?对不起,这不是事实。这是两者的结合。你的第二个命令奏效了。
sed  -i 's/^bar/ a \
\t test' test.yml