에서 정규식을 필드 구분자로 사용하려고합니다 awk
. 내 독서에서 이것은 가능해 보이지만 구문을 올바르게 얻을 수는 없습니다.
rpm -qa | awk '{ 'FS == [0-9]' ; print $1 }'
awk: cmd. line:1: { FS
awk: cmd. line:1: ^ unexpected newline or end of string
생각? 분명하지 않은 목표는 버전 번호가없는 소프트웨어 목록을 얻는 것입니다.
답변
따옴표와 구문을 정리했습니다. 입력 필드 구분 기호를 설정하려면 가장 쉬운 방법 -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
문자열에는 항상 큰 따옴표가 사용됩니다.
답변
Kusalananda의 답변 +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
질문의 다른 오류 :
- 작은 따옴표로 묶은 문자열 안에 작은 따옴표를 사용할 수 없습니다
==
비교 연산자이며=
변수 할당