awk에서 정규식을 필드 구분 기호로 사용하는 방법은 무엇입니까?

awk에서 정규식을 필드 구분 기호로 사용하는 방법은 무엇입니까?

내가 읽은 바에 따르면 정규식을 사용하려고 하는데 awk구문을 제대로 이해할 수 없습니다.

rpm -qa | awk '{ 'FS == [0-9]' ; print $1 }'
awk: cmd. line:1: { FS
awk: cmd. line:1:     ^ unexpected newline or end of string

아이디어? 명확하지 않은 경우 목표는 버전 번호 없이 소프트웨어 목록을 얻는 것입니다.

답변1

인용과 구문을 엉망으로 만들었습니다. 입력 필드 구분 기호를 설정하려면 -F명령줄에서 옵션을 사용하는 가장 쉬운 방법이 있습니다.

awk -F '[0-9]' '{ print $1 }'

또는

awk -F '[[:digit:]]' '{ print $1 }'

입력 필드 구분 기호로 숫자를 사용한 다음 각 줄의 첫 번째 필드를 출력합니다.

그리고 [0-9]그 표현 [[:digit:]]은 그렇지 않다.상당히지역에 따라 동일합니다. 바라보다"[0-9], [[:digit:]] 및 \d의 차이점".

프로그램 자체 내에서 설정할 수도 있습니다 FS. 이는 일회성 초기화이므로 awk일반적으로 블록에서 수행됩니다 .BEGIN

awk 'BEGIN { FS = "[0-9]" } { print $1 }'

셸에서 작은따옴표로 묶인 문자열 내에서는 작은따옴표를 사용할 수 없으며 문자열 awk언제나큰따옴표를 사용하세요.

답변2

Kusarananda의 답변에 +1입니다. 또는 BEGIN 블록에서 FS 변수를 설정할 수 있습니다.

awk 'BEGIN {FS="[0-9]"} {print $1}'

액션 블록에서 FS를 변경하면 다음 행을 읽을 때까지 적용되지 않습니다.

$ printf "%s\n" "abc123 def456" "ghi789 jkl0" | awk '{FS="[0-9]"; print $1}'
abc123
ghi

질문의 다른 오류:

  • 작은따옴표로 묶인 문자열 안에는 작은따옴표를 사용할 수 없습니다.
  • ===변수 할당에 사용되는 비교 연산자입니다.

관련 정보