첫 번째 필드가 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.