2つの異なる一致の間でテキストを抽出する

2つの異なる一致の間でテキストを抽出する

特定の最初の項目(_と-)の間のテキストを抽出しようとしています。たとえば、下から数字5を取得する必要があります。

MQSeriesRuntime_5-U200491-7.5.0-4.x86_64

awkフィールド区切り文字(awk -F)を試しましたが、_の後に全文が表示されました。

答え1

フィールド区切り記号を使用して創造性を発揮します。

$ awk 'BEGIN {FS="_|-"} {print $2}' input
5

秘訣はFS文字列ではないということです。これは正規表現です。

お客様のご要望に応じて、以下で詳しく説明します。

スクリプトは、着信データが処理される前に実行される awkコードブロックを定義できます。BEGIN

FSこのコードブロックを使用して、正規表現をハイフン()またはアンダースコア()として使用してフィールド-区切り文字()を定義します_

次のコードブロックは、探しているフィールドである{print $2}2番目のフィールド(つまり、前の区切り文字で区切られた2番目の文字列)を印刷します。プレフィックスのないコードブロックは、読み取った各レコードに対して実行されます。/-|_/5awk

答え2

パラメータを使用すると、-F少し短い解決策が得られます。

$ awk -F'-|_' '{print $2}' input
5

答え3

sed代替方法:

sed 's/^[^_-]*_\([^_-]*\)-.*/\1/' file
5

答え4

からインスピレーションを受けるhttps://stackoverflow.com/a/2957781/53897:

echo MQSeriesRuntime_5-U200491-7.5.0-4.x86_64 | perl -n -e '/_([^-]+)/ && print $1'

関連情報