假设我有以下参数。
ENABLE='Y'
CHECK1="MAILBOX"
ID="abc@gmail.com, bcd@gmail.com"
如果ENABLE =' Y'。那我想要
MAILBOX =" abc @ gmail.com,bcd @ gmail.com"
有没有办法实现这个目标?
答案 0 :(得分:1)
awk -F"=|'|\"" 'NR==1&&$3=="Y"{yes=1} /CHECK/{chk=$3} /ID=/&&yes{printf ("%s=\"%s\"\n",chk,$3)}' File
否则,您可以将此脚本放在文件myfile.awk
BEGIN {
FS="=|'|\""
}
NR==1&&$3=="Y"{yes=1}
/CHECK/{chk=$3}
/ID=/&&yes{printf("%s=\"%s\"\n", chk, $3)}
并执行awk -f myfile.awk File
。
我们将分隔符设置为=
,'
和"
。在第一行(NR==1)
中,检查ENABLE ='Y
',然后设置变量yes=1
。然后,当CHECK
匹配时,它会将=
之后的检查字符串保存到变量chk
。然后,当ID=
匹配时(即在最后一行),如果chk string="addresses"
,它将打印yes = 1
。
答案 1 :(得分:0)
sed -n "/ENABLE/,/ID/ {
H
/ID/ {
s/.*//
x
/ENABLE='Y'/ s/.*CHECK1=\"\([^\"]*\).*ID=/\1/p
}
}" YourFile
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed -rn '/^ENABLE='\''Y'\''$/{n;N;s/.*"(.*)".*(".*").*/\1=\2/p}' file
如果一行包含ENABLE='Y'
,则将其丢弃并读入下两行,并在双引号上进行模式匹配。如果匹配成功则打印所需的结果,否则不打印任何内容。