awk
のフィールドセパレーターとして正規表現を使用しようとしています。私の読書からこれは可能に思われますが、構文を正しく得ることができません。
rpm -qa | awk '{ 'FS == [0-9]' ; print $1 }'
awk: cmd. line:1: { FS
awk: cmd. line:1: ^ unexpected newline or end of string
考え?明らかでないとしても、バージョン番号なしのソフトウェアのリストを取得することが目標です。
あなたはあなたの引用と構文をだましました。入力フィールド区切り文字を設定するには、コマンドラインで-F
オプションを使用するのが最も簡単な方法です。
awk -F '[0-9]' '{ print $1 }'
または
awk -F '[[:digit:]]' '{ print $1 }'
これは、任意の数字を入力フィールド区切り文字として使用し、各行の最初のフィールドを出力します。
ロケールによっては、[0-9]
と[[:digit:]]
の式はまったく異なります。 「 [0-9]、[[:digit:]]、\ d の違い」を参照してください。
FS
プログラム自体にawk
を設定することもできます。これは1回の初期化なので、通常BEGIN
ブロックで行われます。
awk 'BEGIN { FS = "[0-9]" } { print $1 }'
シェルでは、単一引用符は単一引用符で囲んだ文字列では使用できず、awk
文字列は常に二重引用符を使用することに注意してください。
クサラナンダの答えの+1。または、FS変数をBEGINブロックで設定できます。
awk 'BEGIN {FS="[0-9]"} {print $1}'
アクションブロックでFSを変更すると、次の行が読み取られるまで有効になりません
$ printf "%s\n" "abc123 def456" "ghi789 jkl0" | awk '{FS="[0-9]"; print $1}'
abc123
ghi
質問の他のエラー:
==
は比較演算子、=
は変数割り当て用です