【发布时间】:2017-06-15 21:21:58
【问题描述】:
我有以下 input.txt :
"loop:\n\t"
"add %%g1, 1, %%g1\n\t"
我想在第一行和第二行之间插入一行以获得:
"loop:\n\t"
"add %%g1, 1, %%g1\n\t"
"add %%g1, 1, %%g1\n\t"
这是我尝试过的:
sed '/loop\:/a "\t \t add %%g1, 1, %%g1\\n\\t"' input.txt
但是有了这个,我得到:
"loop:\n\t"
" add %%g1, 1, %%g1\n\t"
"add %%g1, 1, %%g1\n\t"
如您所见,插入行的第一个引号位于行首,而不是在add 字之前。
如何规避这个问题?
谢谢
更新 1:
我意识到每行开头和第一个字符之间的空格不是制表符,而是经典空格。
然后,我尝试使用这个解决方案(来自this link)
awk '{print} /loop\:/{ print substr($0,1,match($0,/[^[:space:]]/)-1) "add %%g1, 1, %%g1\n\t"}' input.txt
似乎这个命令行从上一行计算了正确的缩进,但不幸的是,我得到了这个:
"loop:\n\t"
"add %%g1, 1, %%g1\n\t"
"add %%g1, 1, %%g1\n\t"
而我想要:
"loop:\n\t"
"add %%g1, 1, %%g1\n\t"
"add %%g1, 1, %%g1\n\t"
你能看到错误吗?
问候
【问题讨论】:
-
如果那个 awk 脚本产生了那个输出,那么你的 awk 就会以非常具体和神奇的方式严重破坏(我非常怀疑)。
print ... "add %%g1, 1, %%g1\n\t"只是 不能 输出"add %%g1, 1, %%g1\n\t",因为您传递给print的字符串不包含双引号,也不会转义反斜杠。