awkで正規表現をフィールド区切り文字として使用するには?

awkで正規表現をフィールド区切り文字として使用するには?

私が読んだところでは、正規表現を使用しようとしていますが、awk構文を正しく理解できません。

rpm -qa | awk '{ 'FS == [0-9]' ; print $1 }'
awk: cmd. line:1: { FS
awk: cmd. line:1:     ^ unexpected newline or end of string

アイデア?明確でない場合、目的はバージョン番号なしでソフトウェアのリストを取得することです。

答え1

引用とフレーズを台無しにしました。入力フィールド区切り文字を設定するには、-Fコマンドラインでオプションを使用する最も簡単な方法があります。

awk -F '[0-9]' '{ print $1 }'

または

awk -F '[[:digit:]]' '{ print $1 }'

入力フィールド区切り文字として数字を使用し、各行の最初のフィールドを出力します。

そして[0-9]その表現[[:digit:]]はそうではありません。かなり地域によって同じです。望むより」[0-9]、[[:digit:]]、\dの違い」。

プログラム自体内で設定することもできますFS。これはワンタイム初期化であるため、awk通常はブロックで行われます。BEGIN

awk 'BEGIN { FS = "[0-9]" } { print $1 }'

シェルで一重引用符で囲まれた文字列内では一重引用符を使用できませんawkいつも二重引用符を使用してください。

答え2

Kusaranandaの答えは+1です。あるいは、BEGINブロックでFS変数を設定することもできます。

awk 'BEGIN {FS="[0-9]"} {print $1}'

アクションブロックでFSを変更すると、次の行が読み込まれるまで適用されません。

$ printf "%s\n" "abc123 def456" "ghi789 jkl0" | awk '{FS="[0-9]"; print $1}'
abc123
ghi

質問の他のエラー:

  • 一重引用符で囲まれた文字列の中に一重引用符を使用することはできません。
  • ===変数の割り当てに使用される比較演算子です。

関連情報