如何在 Unix 中 concatenate/merge 这种模式的字符串
How to concatenate/merge strings of this pattern in Unix
假设我有以下参数。
ENABLE='Y'
CHECK1="MAILBOX"
ID="abc@gmail.com, bcd@gmail.com"
如果启用='Y'。那我要
邮箱="abc@gmail.com, bcd@gmail.com"
有办法实现吗?
awk -F"=|'|\"" 'NR==1&&=="Y"{yes=1} /CHECK/{chk=} /ID=/&&yes{printf ("%s=\"%s\"\n",chk,)}' File
否则,您可以将此脚本放入文件中myfile.awk
BEGIN {
FS="=|'|\""
}
NR==1&&=="Y"{yes=1}
/CHECK/{chk=}
/ID=/&&yes{printf("%s=\"%s\"\n", chk, )}
并执行 awk -f myfile.awk File
.
我们将分隔符设置为=
、'
和"
。在第一行(NR==1)
,检查是否ENABLE='Y
',然后设置变量yes=1
。然后,当匹配到CHECK
时,会将=
之后的校验串保存到变量chk
中。然后,当 ID=
匹配时(即在最后一行),它将打印 chk string="addresses"
if yes = 1
.
sed -n "/ENABLE/,/ID/ {
H
/ID/ {
s/.*//
x
/ENABLE='Y'/ s/.*CHECK1=\"\([^\"]*\).*ID=//p
}
}" YourFile
- 假设文件以正确的顺序和完整的内容填充(只有 X * 3 行)
这可能对你有用(GNU sed):
sed -rn '/^ENABLE='\''Y'\''$/{n;N;s/.*"(.*)".*(".*").*/=/p}' file
如果一行包含 ENABLE='Y'
则丢弃它并读入接下来的两行并在双引号上进行模式匹配。如果匹配成功打印所需结果,否则不打印任何内容。
假设我有以下参数。
ENABLE='Y'
CHECK1="MAILBOX"
ID="abc@gmail.com, bcd@gmail.com"
如果启用='Y'。那我要
邮箱="abc@gmail.com, bcd@gmail.com"
有办法实现吗?
awk -F"=|'|\"" 'NR==1&&=="Y"{yes=1} /CHECK/{chk=} /ID=/&&yes{printf ("%s=\"%s\"\n",chk,)}' File
否则,您可以将此脚本放入文件中myfile.awk
BEGIN {
FS="=|'|\""
}
NR==1&&=="Y"{yes=1}
/CHECK/{chk=}
/ID=/&&yes{printf("%s=\"%s\"\n", chk, )}
并执行 awk -f myfile.awk File
.
我们将分隔符设置为=
、'
和"
。在第一行(NR==1)
,检查是否ENABLE='Y
',然后设置变量yes=1
。然后,当匹配到CHECK
时,会将=
之后的校验串保存到变量chk
中。然后,当 ID=
匹配时(即在最后一行),它将打印 chk string="addresses"
if yes = 1
.
sed -n "/ENABLE/,/ID/ {
H
/ID/ {
s/.*//
x
/ENABLE='Y'/ s/.*CHECK1=\"\([^\"]*\).*ID=//p
}
}" YourFile
- 假设文件以正确的顺序和完整的内容填充(只有 X * 3 行)
这可能对你有用(GNU sed):
sed -rn '/^ENABLE='\''Y'\''$/{n;N;s/.*"(.*)".*(".*").*/=/p}' file
如果一行包含 ENABLE='Y'
则丢弃它并读入接下来的两行并在双引号上进行模式匹配。如果匹配成功打印所需结果,否则不打印任何内容。