첫 번째 필드가 Linux1로 문자열로 시작하는 경우에만 awk + print 행


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과 ^는 중복됩니다. 제안서에 탭이 포함되어 있지 않습니다.
Hauke ​​Laging

@HuakeLaging 왜 $ 1과 ^가 중복이라고 생각합니까? 첫 단어 만 일치시키고 시작시 일치가 고정되도록 (예 : "mLinux"는 / Linux1 /과 일치하지만 / ^ Linux /와는 일치하지 않음) 둘 다 필요합니다.
Nick Bull

19

awk는 필드를 지정할 때 선행 공백을 무시합니다. 기본 명령은 인쇄입니다.

awk '$1 ~ /^Linux1/'

당신이 원하는 것입니다.

상해:

  • $ 1은 awk에게 첫 번째 "열"을 보도록 지시합니다.
  • ~ awk에게 RegularExpression 일치를 수행하도록 지시합니다. /..../는 정규식입니다.
  • RE 내에는 문자열 Linux와 특수 문자 ^가 있습니다.
  • ^는 RE의 시작과 일치하게합니다 (줄의 어느 곳과도 일치하지 않음).

함께보기 : Awk는 첫 번째 열의 시작 부분에서 "Linux"와 정규식을 일치시킵니다.


2

이것은이 특별한 경우에 효과가 있습니다.

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

그러나 공간이 Linux1보다 앞에 있으면 일치하지 않습니다
yael

@yael 나는 그것을 수정하기 위해 편집했다.
Hauke ​​Laging

+1이 구문이 무엇인지 궁금해하는 사람은 "정규 표현식이 해당 행과 일치하는 경우에만 중괄호 안에있는 작업을 수행하십시오"라고 말합니다.
user541686
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.