ファイルから特定のテキストの内容を取得する方法

ファイルから特定のテキストの内容を取得する方法

次の内容を含むデモ.txtというファイルがあります。

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

/* Some other content other than value variable */

value -= [
]

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

このデモ.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一致する行のうち、一致する(空でない)部分のみを印刷します。各部分は別々の出力行に印刷されます。
  • -EPATTERNを拡張正規表現として解釈
  • ".*"引用符内のすべての値を取得します。
  • \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

関連情報