我有一个文件abc.txt,如下所示:
#%PAM-1.0
# Test file
# Hello World
#
# echo "Test"
/etc/init.d/xrdp start
# Comment again
echo "Hello again"
我想在评论后插入一行作为第一个可执行行...所以如果我想在所有行以#开头之后添加一行echo "Batman"
,我该如何实现呢?
输出应如下所示:
#%PAM-1.0
# Test file
# Hello World
#
# echo "Test"
echo "Hello Batman"
/etc/init.d/xrdp start
# Comment again
echo "Hello again"
请注意,该行不会在其他评论专栏# Comment Again
我在下面试过,但它没有用。我是Bash脚本的新手,所以需要专家的帮助。
sed -i '#/a "echo "Batman"' abc.txt
感谢您的帮助!
答案 0 :(得分:4)
只需使用标记即可记录此行的打印时间:
awk '!/^#/ && !f{print "Hello Batman";f=1}1' file
即:当一行不以#
开头并且这是第一次发生时,打印所需的行。然后,设置标志,这样就不会再发生了。
最后,1
会触发输出当前行的print
。
答案 1 :(得分:1)
使用GNU sed,您可以通过而不是使您的模式匹配过于通用,从而更轻松地执行您想要的操作。在实际的语料库中,您可以在第一行之前插入文本,而不是尝试以非贪婪的方式匹配任意数量的注释行。例如:
select b.*
from balls b
where not exists (select 1
from boxings bxb join
boxes bo
on bxb.box_id = bo.id
where bxb.ball_id = b.id and bo.locked = 1
);
如果您确实需要更通用的方法来执行此操作,那么在修改文本之前,您必须更加努力地将文本拆分为段落或部分。这通常比保证工作更多,但你的里程可能会有所不同。