셸 프로 그래 밍 의 정규 표현 식 (3)
Linux/UNIX
시스템 에서 awk
은 강력 한 기능 을 가 진 편집 도구 로 입력 텍스트 를 한 줄 씩 읽 고 지정 한 일치 모드 에 따라 찾 으 며 조건 에 맞 는 내용 을 포맷 출력 하거나 여과 처리 하면 상호작용 이 없 는 상황 에서 복잡 한 텍스트 작업 을 실현 하여 Shell
스 크 립 트 에 널리 응용 된다.각종 자동화 배치 임 무 를 완수 하 다.1. awk 흔 한 용법
awk
에서 사용 하 는 명령 형식 은 다음 과 같 습 니 다. 작은 따옴표 에 큰 괄호 를 더 한 “{}”
은 데이터 에 대한 처리 동작 을 설정 하 는 데 사 용 됩 니 다.awk
은 대상 파일 을 직접 처리 할 수 있 고 “-f”
을 통 해 스 크 립 트 를 읽 어 대상 파일 을 처리 할 수 있 습 니 다.awk ' { }' 1 2 //
awk -f 1 2 // ,
sed
명령 은 항상 한 줄 의 처리 에 사용 되 며, awk
은 한 줄 을 여러 개의 '필드' 로 나 눈 다음 에 처리 하 는 경향 이 있 으 며, 기본 적 인 상황 에서 필드 의 구분 자 는 빈 칸 이나 tab
키 이다.awk
실행 결 과 는 print
의 기능 을 통 해 필드 데 이 터 를 인쇄 하여 표시 할 수 있다.awk
명령 을 사용 하 는 과정 에서 논리 연산 자 “&&”
을 사용 하여 '와', “||”
은 '또는', “!”
은 '비' 를 나 타 낼 수 있다.또한 간단 한 수학 연산 도 할 수 있다. 예 를 들 어 +
, -
, *
, /
, %
, ^
은 각각 더하기, 빼 기, 곱 하기, 나 누 기, 나머지 와 곱 하기 를 나타 낸다./etc/passwd
은 매우 전형 적 인 포맷 파일 로 각 필드 간 에 “:”
을 구분자 로 분리 하고 Linux
시스템 의 대부분의 로그 파일 도 포맷 파일 로 이 파일 에서 관련 정 보 를 추출 하 는 것 은 운영 하 는 일상적인 업무 내용 중 하나 이다./etc/passwd
의 사용자 이름, 사용자 ID
, 그룹 ID
등 열 을 찾 으 려 면 다음 awk 명령 을 실행 하면 됩 니 다.[root@localhost ~]# awk -F ':' '{print $1,$3,$4}' /etc/passwd
root 0 0
bin 1 1
daemon 2 2
adm 3 4
...// ...
//awk , sed , 。 awk , ( ) ( )。 ,awk shell , $1、$2、$3„ ( ) 。 awk $0 ( )。 。awk 。awk “-F ” 。
awk
은 몇 가지 특수 한 내장 변수 (직접 사용 가능) 를 포함 하 는데 다음 과 같다 설명 하 다.
FS
줄 마다 텍스트 의 필드 구분 자 를 지정 합 니 다. 기본 값 은 빈 칸 이나 탭 위치 입 니 다.
NF
현재 처 리 된 줄 의 필드 개수
NR
현재 처 리 된 줄 의 줄 번호 (번호)
$0
현재 처 리 된 줄 의 전체 줄 내용 입 니 다.
$n
현재 처리 줄 의
n
필드 (n
열)FILENAME
처 리 된 파일 이름
RS
데이터 기록 구분, 기본 값
, 즉 모든 행위 의 기록 입 니 다.2. 용법 예시
1) 줄 별로 텍스트 출력
[root@localhost opt]# awk '{print}' bbb.txt // , cat bbb.txt
this is
the wood
wood
wod
the wood
this is test
[root@localhost opt]# awk '{print $0}' bbb.txt // , cat bbb.txt
this is
the wood
wood
wod
the wood
this is tes
[root@localhost opt]# awk 'NR==1,NR==3{print}' bbb.txt // 1~3
this is
the wood
wood
[root@localhost opt]# awk '(NR>=1)&&(NR<=3){print}' bbb.txt // 1~3
this is
the wood
wood
[root@localhost opt]# awk 'NR==1||NR==3{print}' bbb.txt // 1 、 3
this is
wood
[root@localhost opt]# awk '(NR%2)==1{print}' bbb.txt //
this is
wood
the wood
[root@localhost opt]# awk '(NR%2)==0{print}' bbb.txt //
the wood
wod
this is test
[root@localhost opt]# awk '/^the/{print}' bbb.txt // the
the wood
the wood
[root@localhost opt]# awk '/wood$/{print}' bbb.txt // wood
the wood
wood
the wood
[root@localhost opt]# awk 'BEGIN {x=0};/\/bin\/bash$/{x++};END {print x}' /etc/passwd
2 // /bin/bash , grep -c "/bin/bash$" /etc/passwd
[root@localhost opt]# awk 'BEGIN {RS=""};END{print NR}' httpd.txt //
38
2) 필드 별로 텍스트 출력
[root@localhost opt]# vim bbb.txt //
this is txt
the wood aaa
wood is bbb //
wod is ccc
the wood AAA
this is test
~
~
:wq //
[root@localhost opt]# awk '{print $3}' bbb.txt // ( ) 3
txt
aaa
bbb
ccc
AAA
test
[root@localhost opt]# awk '{print $1,$3}' bbb.txt // 1、3
this txt
the aaa
wood bbb
wod ccc
the AAA
this test
[root@localhost opt]# awk -F ":" '$2=="*"{print}' /etc/shadow // “*” shadow
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
lp:*:17110:0:99999:7:::
sync:*:17110:0:99999:7:::
shutdown:*:17110:0:99999:7:::
halt:*:17110:0:99999:7:::
mail:*:17110:0:99999:7:::
operator:*:17110:0:99999:7:::
games:*:17110:0:99999:7:::
ftp:*:17110:0:99999:7:::
nobody:*:17110:0:99999:7:::
[root@localhost opt]# awk 'BEGIN{FS=":"};$2=="*";END{print}' /etc/shadow
bin:*:17110:0:99999:7::: // “*” shadow
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
lp:*:17110:0:99999:7:::
sync:*:17110:0:99999:7:::
shutdown:*:17110:0:99999:7:::
halt:*:17110:0:99999:7:::
mail:*:17110:0:99999:7:::
operator:*:17110:0:99999:7:::
games:*:17110:0:99999:7:::
ftp:*:17110:0:99999:7:::
nobody:*:17110:0:99999:7:::
named:!!:18178::::::
[root@localhost opt]# awk -F ":" '$7~"/bash"{print $1}' /etc/passwd
root // 7 /bash 1
sun
[root@localhost opt]# awk '($1~"nfs")&&(NF==8){print $1,$2}' /etc/services
nfs 2049/tcp // 8 1 nfs 1、2
nfs 2049/udp
nfs 2049/sctp
netconfsoaphttp 832/tcp
netconfsoaphttp 832/udp
netconfsoapbeep 833/tcp
netconfsoapbeep 833/udp
[root@localhost opt]# awk -F ":" '($7!="/bin/bash")&&($7!="/sbin/nologin"){print}' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync // 7 /bin/bash /sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
3) 파이프, 따옴표 로 셸 명령 호출
[root@localhost opt]# awk -F : '/bash/{print | "wc -l"}' /etc/passwd
2 // wc -l bash , grep -c "bash$" /etc/passwd
[root@localhost opt]# awk 'BEGIN {while ("w" | getline) n++ ; {print n-2}}'
1 // w , , while w ,getline ,n-2
[root@localhost opt]# awk 'BEGIN { "hostname" | getline ; print $0}'
localhost.localdomain // hostname,
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ZSH에서 물고기까지ZSH는 수년 동안 내 기본 셸이었습니다. 이제 몇 달 동안 사용하면서 ZSH 구성에 대해 몇 가지 사항을 발견했습니다. 우리는 을 제공하는 시스템과 더 빨리 상호 작용하는 경향이 있습니다. 내.zshrc 구성에는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.