如何从文件中获取特定文本中的内容

如何从文件中获取特定文本中的内容

我有一个文件名demo.txt,内容如下:

value -= [
 "02|05|06|abc",
]

/* Some other content other than value variable */

value -= [
]

value -= [
 "0698|06|07|abc",
]

我在这个 demo.txt 文件中有很多值变量。

我想在读取 demo.txt 文件后仅打印如下所示的唯一值

02| 05| 06| 0698| 07| abc

我尝试如下:

awk '$0 == "value -= [" {i=1;next};i && i++ <= 1'

这给了我

"02|05|06|abc",
]
"0698|06|07|abc",

但是,我不想要“]”,也不想要重复的内容。在本例中为“06”和​​“abc”

有人可以建议吗?

答案1

$ grep -oE '".*"' demo.txt | grep -oE '\w+' | sort -u
02
05
06
0698
07
abc
  • -o仅打印匹配行的匹配(非空)部分,每个此类部分位于单独的输出行上
  • -E将 PATTERN 解释为扩展正则表达式
  • ".*"获取引号内的所有值
  • \w+1 个或多个字母/数字/下划线字符
  • sort -u获得独特的价值

答案2

这是一个使用的解决方案awk -v RS='' -F='"' -f script input_file

/value -= \[/ {
    split($0, data);
    count = split(data[2], values, "|");
    for (i = 1; i <= count; i++) {
        result[values[i]] = values[i];
    }
}

END {
    for (r in result) {
        printf r "|";
    }
    print "";
}

也可以通过以下方式完成sed

sed -nr '/"/{s/[ "]//g;s/,/|/;G;s/\n//;x};${x; :a; s/([^|]+\|)(.*)\1/\2/; ta; p}' input

相关内容