awk +最初のフィールドがLinux1の文字列で始まる場合にのみ行を出力


16

最初のフィールドがLinux1で始まる場合の行の印刷方法

例えば:

  echo Linux1_ver2  12542 kernel-update  |   awk '{if ($1 ~ Linux1 ) print $0;}'

最初のフィールドはLinux1で始まりますが、ターゲットは行を出力することです

行の例:

Linux1-new  36352 Version:true
Linux1-1625543  9847
Linux1:16254 8467563 

備考-最初のファイルの前にスペースまたはTABを挿入できます

回答:


15

一方通行:

echo "Linux1_ver2  12542 kernel-update"  |  awk '$1 ~ /^ *Linux1/'

$ 1と^は冗長です。あなたの提案はタブをカバーしていません。
ハウケレイジング

@HuakeLagingなぜ$ 1と^は冗長だと思いますか?最初の単語だけが一致するように、また一致が開始時に固定されるように(たとえば、「mLinux」は/ ^ Linux /ではなく/ Linux1 /で一致できるように)両方が必要であると確信しています。
ニック・ブル

19

awkは、フィールドを割り当てるときに先頭の空白を無視します。デフォルトのコマンドはprintです。

awk '$1 ~ /^Linux1/'

あなたが望むものです。

詳細な説明:

  • $ 1はawkに最初の「列」を調べるように指示します。
  • 〜はawkにRegularExpressionマッチを行うように指示します。/..../は正規表現です。
  • RE内には、Linuxという文字列と特殊文字^があります。
  • ^は、REを最初から一致させます(行のどこでも一致するのではなく)。

一緒に見た場合:Awkは、最初の列の先頭にある正規表現と「Linux」を一致させます。


2

これは、この特定のケースで機能するはずです。

awk '/^[[:blank:]]*Linux1/ {print}'

しかし、スペースがLinux1の前にある場合、一致しません
-yael

@yaelそれを修正するために編集しました。
ハウケレイジング

+1この構文が何をしているのか疑問に思う人には:「正規表現がその行に一致する場合にのみ、括弧内のことをする」と言っています。
user541686
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.