Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
Shell 如果上一行模式匹配,则追加到当前行_Shell_Unix_Awk_Sed - Fatal编程技术网

Shell 如果上一行模式匹配,则追加到当前行

Shell 如果上一行模式匹配,则追加到当前行,shell,unix,awk,sed,Shell,Unix,Awk,Sed,我正在寻找awk/sed命令,如果前一行有模式,则将字符附加到当前行 例如: SELECT customer from Cust_tab WHERE forename = "XXX" sname = "YYY" postcode="ZZ ZZZ" 预期: 如果前一行/第一行有=,我想在行首添加和。试着做 sed 's/WHERE.*/& AND/g' 但这会添加到行尾,而不是开始,并且无法在文件的第三行重复此操作。编辑:以下代码可能

我正在寻找
awk/sed
命令,如果前一行有模式,则将字符附加到当前行

例如:

SELECT customer from Cust_tab WHERE forename = "XXX"                        
sname = "YYY"
postcode="ZZ ZZZ"
预期:


如果前一行/第一行有
=
,我想在行首添加
。试着做

sed 's/WHERE.*/& AND/g' 
但这会添加到行尾,而不是开始,并且无法在文件的第三行重复此操作。

编辑:以下代码可能会帮助您设置一个标志,当一行有字符串时,选择该字符串,直到出现空行,它将继续向所有行添加
字符串

awk '/^SELECT.*=/{print;flag=1;next} !NF{flag=""} flag{print "AND ",$0}' Input_file

你的问题不是很清楚,但基于你的陈述和展示的样品,你可以尝试下面的内容,并让我知道这是否有帮助

awk '/=/{print;getline;print "AND " $0}' Input_file
编辑:下面的代码可能会帮助您设置一个标志,当一行有字符串时,
选择
,直到空行出现,它将继续向所有行添加
字符串

awk '/^SELECT.*=/{print;flag=1;next} !NF{flag=""} flag{print "AND ",$0}' Input_file

你的问题不是很清楚,但基于你的陈述和展示的样品,你可以尝试下面的内容,并让我知道这是否有帮助

awk '/=/{print;getline;print "AND " $0}' Input_file
使用
awk

$ awk 'e{$0="AND " $0; e=0}1; /=/{e=1}' file
使用
awk

$ awk 'e{$0="AND " $0; e=0}1; /=/{e=1}' file

你为自己做了什么?如果你想在前一行包含
=
时匹配,请使用用于提问的命令发布你的全部努力,为什么您要尝试匹配字符串
WHERE
?您自己尝试了什么?使用用于问题的命令发布您的全部努力如果您想匹配上一行包含
=
,为什么您要尝试匹配字符串
WHERE
?谢谢。但它不适用于后续行:从Cust_选项卡中选择customer,其中forename=“XXX”和sname=“YYY”postcode=“ZZ ZZZ”和postcode=“ZZ ZZZ”@Dev,请检查我的编辑代码,并让我知道这是否对您有帮助?我得到了类似的结果。从客户选项卡中选择客户,其中forename=“XXX”和sname=“YYY”postcode=“ZZ ZZZ”和postcode=“ZZ ZZZ”AND@Dev,说实话,我不能理解,请澄清你的问题,如果可能的话,再报告一次样品。谢谢。但它不适用于后续行:从Cust_选项卡中选择customer,其中forename=“XXX”和sname=“YYY”postcode=“ZZ ZZZ”和postcode=“ZZ ZZZ”@Dev,请检查我的编辑代码,并让我知道这是否对您有帮助?我得到了类似的结果。从客户选项卡中选择客户,其中forename=“XXX”和sname=“YYY”postcode=“ZZ ZZZ”和postcode=“ZZ ZZZ”AND@Dev,说实话,我无法理解,请澄清你的问题,如果可能的话,再报告样品。谢谢@karakfaWorks@karakfa