awk + dòng in chỉ khi trường đầu tiên bắt đầu bằng chuỗi là Linux1


16

Làm thế nào để in dòng trong trường hợp trường đầu tiên bắt đầu với Linux1

ví dụ:

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

mục tiêu là in dòng, trong khi trường đầu tiên bắt đầu với Linux1

ví dụ về dòng:

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

nhận xét - không gian hoặc TAB có thể là trước khi nộp lần đầu tiên

Câu trả lời:


15

Một chiều:

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

$ 1 và ^ là dư thừa. Đề xuất của bạn không bao gồm các tab.
Hauke ​​Laging

@HuakeLaging Tại sao bạn nghĩ $ 1 và ^ là dư thừa? Tôi khá chắc chắn rằng cả hai đều được yêu cầu sao cho từ đầu tiên chỉ khớp với nhau và do đó, từ trùng khớp được bắt đầu khi bắt đầu (ví dụ: "mLinux" có thể được khớp với / Linux1 /, nhưng không phải bởi / ^ Linux /).
Nick Bull

19

awk bỏ qua khoảng trống hàng đầu khi gán trường. Lệnh mặc định là in.

awk '$1 ~ /^Linux1/'

Là những gì bạn muốn.

Giải thích chi tiết:

  • $ 1 bảo awk nhìn vào "cột" đầu tiên.
  • ~ bảo awk thực hiện một trận đấu thường xuyên /..../ là một biểu thức chính quy.
  • Trong RE là chuỗi Linux và ký tự đặc biệt ^.
  • ^ làm cho RE khớp từ đầu (trái ngược với khớp ở bất kỳ đâu trong dòng).

Nhìn thấy cùng nhau: Awk sẽ khớp một biểu thức chính quy với "Linux" ở đầu cột đầu tiên.


2

Điều này sẽ làm việc cho trường hợp cụ thể này.

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

nhưng nếu không gian trước Linux1 thì nó sẽ không khớp
yael

@yael Tôi đã chỉnh sửa để sửa nó.
Hauke ​​Laging

+1 Đối với bất kỳ ai thắc mắc cú pháp này đang làm gì: nó nói "hãy làm những việc bên trong niềng răng chỉ khi regex khớp với dòng đó".
dùng541686
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.