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

Jawaban:


15

Satu arah:

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

$ 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.


2

Ini harus bekerja untuk kasus khusus ini.

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.