Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在文件的特定空行中插入文本(bash)_Bash_Awk - Fatal编程技术网

如何在文件的特定空行中插入文本(bash)

如何在文件的特定空行中插入文本(bash),bash,awk,Bash,Awk,这是我的文件的一个示例: AAAA BBBB CCCC [section 1] DDDD EEEE [section 2] FFFF GGGG [section 3] IIII 我需要插入A)第1节的最后一行为XXXX,以及B)第3节之后的第2行为YYYY(但创建一个全新的行,以便第2节和第3节始终以空行分隔)。这将是预期的结果: AAAA BBBB CCCC [section 1] DDDD EEEE XXXX [section 2] FFFF GGGG YYYY [sectio

这是我的文件的一个示例:

AAAA
BBBB
CCCC

[section 1]
DDDD
EEEE

[section 2]
FFFF
GGGG

[section 3]
IIII
我需要插入A)第1节的最后一行为
XXXX
,以及B)第3节之后的第2行为
YYYY
(但创建一个全新的行,以便第2节和第3节始终以空行分隔)。这将是预期的结果:

AAAA
BBBB
CCCC

[section 1]
DDDD
EEEE
XXXX

[section 2]
FFFF
GGGG

YYYY
[section 3]
IIII

可以使用sed在bash文件中完成它?

使用
awk
sed
更容易。使用
awk
可以使用空的
RS
执行此操作:

awk -v ORS='\n\n' -v RS= '/\[section 1]/{$0 = $0 "\nXXXX"}
 /\[section 3]/{$0 = "YYYY\n" $0} 1' file


您好,我试过这句话,但得到了这个结果:YYYY AAAA BBBB CCCC[第1节]DDDD EEEE[第2节]FFFF GGGG[第3节]IIII XXXX我可能做错了什么?谢谢Ed,现在已经编辑好了@AndrésF:你能用
cat-A文件检查你的输入文件吗?以确保没有DOS行结尾。同时确保你的输入数据与问题中显示的数据相同。检查此工作演示:您是否希望更改以文本
[第1节]
开头的记录,而不管它在输入文件中出现的顺序,或者在任何行中包含文本
[第1节]
,或者您是否试图更改输入文件中的第二条记录,而不管其内容如何?请回答您的问题以澄清您的要求,因为目前还不清楚/不明确。欢迎使用StackOverflow!你的问题的答案是“是的,有办法”。请看一看关于改进此问题的提示。特别是,它需要包含用于解决问题的代码。我们(不管怎么说,我们中的大多数人)不是免费工作的短期程序员,我们是一个互相帮助提高技能的社区。
AAAA
BBBB
CCCC

[section 1]
DDDD
EEEE
XXXX

[section 2]
FFFF
GGGG

YYYY
[section 3]
IIII