为什么不在第一个添加的行上插入选项卡?
Why won't the tab be inserted on the first added line?
我正在尝试向一个文件中添加多行,所有行都带有制表符。这些行应在匹配字符串后插入第一行。
假设一个只有一行的文件,名为"my-file.txt"如下:
foo
我尝试了以下 sed 命令:
sed "/^foo$/a \tinsert1\n\tinsert2" my-file.txt
这会产生以下输出:
foo
tinsert1
insert2
请注意应该位于第一行(插入的)的制表符是如何被省略的。相反,它会打印一个额外的前导 't'.
为什么?以及如何更改我的命令以按预期在第一行打印选项卡?
使用 GNU sed:
sed '/^foo$/a \tinsert1\n\tinsert2' file
<---- single quotes! --->
产生:
foo
insert1
insert2
来自手册:
a \
text Append text, which has each embedded newline preceded by a backslash.
由于要追加的文本本身必须以反斜杠开头,因此开头必须是 \t
。
PS:如果因为要注入 shell 变量而需要在 sed 命令周围使用双引号,则需要转义要附加的文本之前的 \:
ins1="foo"
ins2="bar"
sed "/^foo$/a \\t${ins1}\n\t${ins2}" file
sed 用于对单个字符串执行 s/old/new,仅此而已。只需使用 awk:
$ awk '{print} [=10=]=="foo"{print "\tinsert1\n\tinsert2"}' file
foo
insert1
insert2
以上内容可以在每个 UNIX 机器上使用任何 shell 中的任何 awk 进行工作,并且可以轻松修改以执行您将来可能想做的任何其他事情。
我正在尝试向一个文件中添加多行,所有行都带有制表符。这些行应在匹配字符串后插入第一行。
假设一个只有一行的文件,名为"my-file.txt"如下:
foo
我尝试了以下 sed 命令:
sed "/^foo$/a \tinsert1\n\tinsert2" my-file.txt
这会产生以下输出:
foo
tinsert1
insert2
请注意应该位于第一行(插入的)的制表符是如何被省略的。相反,它会打印一个额外的前导 't'.
为什么?以及如何更改我的命令以按预期在第一行打印选项卡?
使用 GNU sed:
sed '/^foo$/a \tinsert1\n\tinsert2' file
<---- single quotes! --->
产生:
foo
insert1
insert2
来自手册:
a \ text Append text, which has each embedded newline preceded by a backslash.
由于要追加的文本本身必须以反斜杠开头,因此开头必须是 \t
。
PS:如果因为要注入 shell 变量而需要在 sed 命令周围使用双引号,则需要转义要附加的文本之前的 \:
ins1="foo"
ins2="bar"
sed "/^foo$/a \\t${ins1}\n\t${ins2}" file
sed 用于对单个字符串执行 s/old/new,仅此而已。只需使用 awk:
$ awk '{print} [=10=]=="foo"{print "\tinsert1\n\tinsert2"}' file
foo
insert1
insert2
以上内容可以在每个 UNIX 机器上使用任何 shell 中的任何 awk 进行工作,并且可以轻松修改以执行您将来可能想做的任何其他事情。