Ubuntu
根據shell中的分隔符過濾數據
我有一個包含如下數據的文件:
"google1|yoo|dummy|yes|wow|/" + VARIABLE + "/" "google2|hub|lab|dummy|yes|/" + VARIABLE + "/" "google3|short|lab|yoo|/" + VARIABLE + "/" "google4|hello|good-guy|bad-girl|lol|dummy|/" + VARIABLE + "/" "google5|good-guy|a4-123|yoo|/" + VARIABLE + "/" "google6|bad-girl|b4-124|hub|/" + VARIABLE + "/"
現在,我想獲取分隔符“|”之間的字元串列表 (管道)。
輸出應為
yoo dummy yes wow hub hello good-guy bad-girl a4-123 b4-124 dummy lol short lab
基本上,我想在分隔符過濾後從字元串列表中獲得唯一值。我嘗試使用 awk 作為
awk -F"|" '{gsub(/\).*/,"",$2);print $2}' file
但是,我得到錯誤的數據。
如果您有
grep
選項pcre
:$ grep -oP '\|\K[^|]+(?=\|)' ip.txt | sort -u a4-123 b4-124 bad-girl dummy good-guy hello hub lab lol short wow yes yoo
-o
只列印匹配的模式
-P
使用 pcre 正則表達式
\|\K
積極向後看是否|
在我們要提取的字元串之前存在
- 同樣,
(?=\|)
積極的前瞻看看|
我們的字元串之後是否有被提取
[^|]+
要提取的字元串 - 簡單地取反|
並獲取一個或多個這樣的字元
sort -u
獲得獨特的價值如果要保留找到這些字元串的順序:
$ grep -oP '\|\K[^|]+(?=\|)' ip.txt | awk '!seen[$0]++' yoo dummy yes wow hub lab short hello good-guy bad-girl lol a4-123 b4-124