我有一个文件名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