1行のテキストで正規表現の後に続く文字列を見つける方法は?

1行のテキストで正規表現の後に続く文字列を見つける方法は?

非常に長いJSONデータ行を含むテキストファイルがあり、特定のフィールドの値を抽出する必要があります。最も簡単な方法はjqorを使用することですgrep -o。ただし、会社のコンピュータにあるためインストールできず、jq私たちが使用しているSolarisバージョンにはgrepそのオプションはありません-o。現在、次のコマンドを使用しています。

cat json.file   |
    tr "," "\n" |
    awk '/customfield_10701/ { print $0 }' |
    tr '"' "\n" |
    awk 'NR==4'

上記の方法はうまく機能しますが、複雑すぎてエレガントな解決策が必要であるという感じを消すことはできません。

json.file:

... jshdgfjhsdgfjh,"customfield_10701":"Some Branch","customfield_10702ksghdkfsdkfjkj ...

現在のコマンドで次のようになります。

Some Branch

(それが私が欲しいものです)。

ベストアンサー1

探しているデータに文字がないことを確認し、"ファイルに "customfield_10701"エントリを含む行が1つしかない場合

sed -n 's/.*"customfield_10701":"\([^"]*\)".*/\1/p'

例えば、

$ cat x
... jshdgfjhsdgfjh,"customfield_10701":"Some Branch","customfield_10702ksghdkfsdkfjkj ...
$ sed -n 's/.*"customfield_10701":"\([^"]*\)".*/\1/p' x
Some Branch

おすすめ記事