特定の最初の項目(_と-)の間のテキストを抽出しようとしています。たとえば、下から数字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番目の文字列)を印刷します。プレフィックスのないコードブロックは、読み取った各レコードに対して実行されます。/-|_/
5
awk
答え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'