如何在Unix中连接/合并此模式的字符串

时间:2015-01-13 08:05:38

标签: unix awk sed

假设我有以下参数。

ENABLE='Y'
CHECK1="MAILBOX"
ID="abc@gmail.com, bcd@gmail.com"

如果ENABLE =' Y'。那我想要

MAILBOX =" abc @ gmail.com,bcd @ gmail.com"

有没有办法实现这个目标?

3 个答案:

答案 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
  • 假设文件填充了正确的序列和完整内容(仅X * 3行)

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed -rn '/^ENABLE='\''Y'\''$/{n;N;s/.*"(.*)".*(".*").*/\1=\2/p}' file

如果一行包含ENABLE='Y',则将其丢弃并读入下两行,并在双引号上进行模式匹配。如果匹配成功则打印所需的结果,否则不打印任何内容。