awk + print line yalnızca ilk alan Linux1 dizesiyle başlarsa


16

Linux1 ile ilk alanın başlaması durumunda satır nasıl yazdırılır

Örneğin:

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

hedef satır yazdırmak, ilk alan Linux1 ile başlar

çizgi örneği:

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

açıklama - boşluk veya SEKME ilk dosyalamadan önce olabilir

Yanıtlar:


15

Tek yön:

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

$ 1 ve ^ gereksizdir. Teklifiniz sekmeleri kapsamıyor.
Hauke ​​Laging

@HuakeLaging Neden $ 1 ve ^ 'nin gereksiz olduğunu düşünüyorsunuz? Her ikisinin de gerekli olduğundan eminim, böylece ilk kelime sadece eşleşir ve eşleşme başlangıçta sabitlenir (örneğin, "mLinux" / Linux1 / ile eşleştirilebilir, ancak / ^ Linux / ile eşleştirilemez).
Nick Bull

19

awk, alanları atarken önde gelen boşlukları yok sayar. Varsayılan komut print'dir.

awk '$1 ~ /^Linux1/'

İstediğin bu.

Detaylı açıklama:

  • 1 $ awk'a ilk "sütuna" bakmasını söyler.
  • ~ awk'ye bir RegularExpression eşleşmesi yapmasını söyler /..../ bir Normal ifadesidir.
  • RE içinde Linux dizesi ve ^ özel karakteri vardır.
  • ^ RE'nin baştan itibaren eşleşmesine neden olur (satırın herhangi bir yerinde eşleşmenin aksine).

Birlikte görülme: Awk, ilk sütunun başlangıcında "Linux" ile normal bir ifadeyi eşleştirecektir.


2

Bu, bu özel durum için çalışmalıdır.

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

ancak alan Linux1'den önce ise eşleşmeyecektir
yael

@yael Bunu düzeltmek için bir düzenleme yaptım.
Hauke ​​Laging

+1 Bu sözdiziminin ne yaptığını merak eden herkese: "parantez içindeki şeyleri ancak normal ifade bu satırla eşleşiyorsa yap" diyor.
user541686
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.