Linux 在两个字符串语句之间插入新字符串
我有许多多行文本文件,格式为Linux 在两个字符串语句之间插入新字符串,linux,bash,shell,awk,terminal,Linux,Bash,Shell,Awk,Terminal,我有许多多行文本文件,格式为 222 333 444 _benny 300 400 500 _andrew 311 411 511 _reusee 322 433 544 _benny 500 500 600 _andrew 我需要从_benny到_andrew取出字符串,然后在它们之间插入一个带_yahoi的字符串,这样输出就变为 222 333 444 _benny 250 321 422 _yahoii 300 400 500 _andrew 我试过用一个“/\u benny/,/\u
222 333 444 _benny
300 400 500 _andrew
311 411 511 _reusee
322 433 544 _benny
500 500 600 _andrew
我需要从_benny到_andrew取出字符串,然后在它们之间插入一个带_yahoi的字符串,这样输出就变为
222 333 444 _benny
250 321 422 _yahoii
300 400 500 _andrew
我试过用一个“/\u benny/,/\u andrew/”文件名
但它只显示此awk脚本的文本
awk '/_benny/,/_andrew/ { if ( $0 ~ /_benny/ ) { print $0; print "250 321 422 _yahoii"; next } { print } }' filename
将产生预期的结果
222 333 444 _benny
250 321 422 _yahoii
300 400 500 _andrew
322 433 544 _benny
250 321 422 _yahoii
500 500 600 _andrew
避免/start/,/end/根据@ed morton的评论,您也可以尝试以下方法:
awk '{ if ( $0 ~ /_benny/ || $0 ~ /_andrew/ ) { if ( $0 ~ /_benny/ ) { print $0; print "250 321 422 _yahoii"; next } { print } } }' filename
第一个字段是什么?只有一次或每个_benny/_andrew?对于每个条目300 400 500 _andrew是文件中的第二行。其他人怎么了。为什么不是从第一行开始到第500 500 600行?Andrewearch也将被更新。您需要澄清应该使用什么逻辑生成输出?永远不要使用/start/,/end/,因为它会使琐碎的事情稍微简单一些,但即使是稍微不琐碎的事情也需要完全重写和/或复制您已有的条件。始终使用/start/{f=1}f/改为end/{f=0}或类似。谢谢。我不是awk专家,所以如果你想用我的脚本的更正版本来说明你的建议,那就是awsome.awk'/_benny/{f=1;$0=$0 ORS 250 321 422_yahoii}f/_andrew/{f=0}'文件