awk + baris cetak hanya jika bidang pertama dimulai dengan string sebagai Linux1

16

cara mencetak baris seandainya bidang pertama dimulai dengan Linux1

sebagai contoh:

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

targetnya adalah untuk mencetak baris, sedangkan bidang pertama dimulai dengan Linux1

contoh garis:

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

komentar - spasi atau TAB bisa sebelum diajukan pertama kali

yael
sumber

Jawaban:

15

Satu arah:

echo "Linux1_ver2  12542 kernel-update"  |  awk '$1 ~ /^ *Linux1/'
Guru
sumber
$ 1 dan ^ berlebihan. Proposal Anda tidak mencakup tab.
Hauke ​​Laging
@HuakeLaging Mengapa menurut Anda $ 1 dan ^ berlebihan? Saya cukup yakin keduanya diperlukan sehingga kata pertama hanya cocok terhadap, dan agar pertandingan tersebut berlabuh di awal (misalnya, "mLinux" bisa dicocokkan dengan / Linux1 /, tetapi tidak oleh / ^ Linux /).
Nick Bull
19

awk mengabaikan kekosongan awal saat menetapkan bidang. Perintah default adalah cetak.

awk '$1 ~ /^Linux1/'

Apa yang kamu inginkan.

Penjelasan detail:

  • $ 1 memberitahu awk untuk melihat "kolom" pertama.
  • ~ memberitahu awk untuk melakukan kecocokan RegularExpression / ........../ adalah ekspresi Reguler.
  • Di dalam RE adalah string Linux dan karakter khusus ^.
  • ^ menyebabkan RE cocok dari awal (bukan pencocokan di mana saja di baris).

Terlihat bersama: Awk akan mencocokkan ekspresi reguler dengan "Linux" di awal kolom pertama.

Johan
sumber
2

Ini harus bekerja untuk kasus khusus ini.

awk '/^[[:blank:]]*Linux1/ {print}'
Bernhard
sumber
tetapi jika ruang sebelum Linux1 itu tidak akan cocok
yael
@yael Saya melakukan edit untuk memperbaikinya.
Hauke ​​Laging
+1 Bagi siapa saja yang bertanya-tanya apa yang dilakukan sintaks ini: ia mengatakan "lakukan hal-hal di dalam kurung hanya jika regex cocok dengan garis itu".
user541686