![](/img/trans.png)
[英]Bash script - how to insert value of variable as new line, 2 line after matching a pattern in text file
[英]Insert a line after a pattern in a file using bash
我有一个文件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
谢谢你的帮助!
只需使用一个标志来跟踪何时打印此行:
awk '!/^#/ && !f{print "Hello Batman";f=1}1' file
也就是说:当一行不是以#
开头并且是第一次发生时,请打印所需的行。 然后,设置标志,这样就不会再次发生。
最后, 1
触发输出当前行的print
。
使用GNU sed,可以通过不使模式匹配得过于泛泛而轻松地完成所需的操作。 在实际的语料库中,您可以在第一行之前插入文本,而不是尝试以非贪婪的方式匹配任意数量的注释行。 例如:
$ sed --in-place '/^\/etc\/init.d\/xrdp start/i\echo "Batman"' /tmp/abc.txt
#%PAM-1.0
# Test file
# Hello World
#
# echo "Test"
echo "Batman"
/etc/init.d/xrdp start
# Comment again
echo "Hello again"
如果您确实需要更通用的方法来执行此操作,则在调整文本之前,您必须更加努力地将文本拆分为段落或部分。 这通常比保证的工作多,但是您的里程可能会有所不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.