如何在 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' 则丢弃它并读入接下来的两行并在双引号上进行模式匹配。如果匹配成功打印所需结果,否则不打印任何内容。