내가 읽은 바에 따르면 정규식을 사용하려고 하는데 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
질문의 다른 오류:
- 작은따옴표로 묶인 문자열 안에는 작은따옴표를 사용할 수 없습니다.
==
=
변수 할당에 사용되는 비교 연산자입니다.