셸 스 크 립 트 의 정규 표현 식,grep,sed,awk
기초 정규
^word ##워드 로 시작 하 는 vi/vim 에서^한 줄 의 시작 을 검색 합 니 다.
word$ ##워드 로 끝 나 는 vi/vim 에서$한 줄 의 끝 을 검색 합 니 다.
^$ ##표시
. ##임 의 문자 만 대표 할 수 있 습 니 다.
\ ##예:\.점 자체,전의 기호 만 을 대표 하여 특수 한 신분 적 의 미 를 가 진 문 자 를 조끼 를 벗 고 복원 합 니 다.
##줄 바 꿈 부호
\r ##매 칭 리 턴
\w ##임의의 문자 와 숫자 가 일치 합 니 다.
* ##앞 글 자 를 0 번 이나 여러 번 반복 합 니 다.
.* ##모든 문자 와 일치 합 니 다.예:^.*여러 글자 로 시작 합 니 다.*$는 여러 글자 로 끝 납 니 다.
[abc] ##문자 집합 에 있 는 임의의 문자 와 일치 합 니 다.
[^abc] ##^후 임의의 문 자 를 포함 하지 않 는 내용 과 일치 합 니 다.중 괄호 안에 있 는^는 반대 입 니 다.
[1-9] ##괄호 안에 있 는 범위 내의 임의의 문자 와 일치 함 을 표시 합 니 다.
a\{n,m\} ##n 에서 m 까지 중 복 된 문 자 를 반복 합 니 다.egrep,sed-r 를 사용 하면 사선 을 제거 할 수 있 습 니 다.
\{n,\} ##최소한 n 번 전에 중 복 된 문 자 를 반복 합 니 다.egrep,sed-r 를 사용 하면 사선 을 제거 할 수 있 습 니 다.
\{n\} ##n 번 이전 중 복 된 문 자 를 반복 합 니 다.egrep,sed-r 를 사용 하면 사선 을 제거 할 수 있 습 니 다.
\{,m}\ ##반복
주:egrep,grep CE 또는 sed Cr 필터 일반 특수 문자
정규 확장(egrep 또는 grep-E)
+ ##한 번 또는 한 번 이상 앞의 문 자 를 반복 합 니 다.
? ##앞 글 자 를 0 번 이나 한 번 반복 합 니 다.
| ##혹은 일치 하 는 문자열 을 여러 개 찾 거나
() ##괄호 안의 문자열 을 찾아내다
^linux ## linux
linux$ ## linux
linuxfan. ## linuxfans
coo[kl] ## cool cook
9[^5689] ## 91,92 , 95,96,98,99
[0-9] ##
[a-z]|[A-Z] ## ,| grep -E
colou?r ## color colour, colouur
rollno-9+ ## rollno-9、rollno-99,rollno-999, rollno-
co*l ## cl,col,cool,coool
ma(tri)x ## matrix
[0-9]{3} ## , [0-9][0-9][0-9]
[0-9]{2,} ##
[0-9]{2,5} ##
Oct (1st|2nd) ## Oct 1st Oct 2nd
a\.b ## a.b, ajb
[a-z0-9_]+\@[a-z0-9_]+\.[a-z]{2,4} ##
[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ## IP
--grep--
문법:grep[옵션][조건 식]대상 파일
cat /proc/meminfo |grep -e Mem -e Cache -e Swap ## 、 、 -e
grep -R -o -n -E '[a-z0-9_]+\@[a-z0-9_]+\.[a-z]{2,4}' /etc/ ## /etc ;-R ,-n ,-o ,-E ,
grep -R -c 'HOSTNAME' /etc/ |grep -v "0$" ## /etc/ “HOSTNAME” ,-c ,-v
grep -R -l 'HOSTNAME' /etc/ ## “HOSTNAME” ,-l ,-L
dmesg | grep -n --color=auto 'eth' ## eth ,
dmesg | grep -n -A3 -B2 --color=auto 'eth' ## dmesg , grep eth ,
cat /etc/passwd |grep -c bash$ ##
touch /tmp/{123,123123,456,1234567}.txt ## , , 123, 1
ls |grep -E '(123)+'
ls |grep '\(123\)\+'
ls |egrep '(123)+'
ps -ef |grep -c httpd ## httpd
grep -C 4 'games' --color /etc/passwd ## games “-C” 4
grep ^adm /etc/group ## adm
ip a |grep -E '^[0-9]' |awk -F : '{print $2}' ##
ifconfig eth0 |grep -E -o 'inet addr:[^ ]*' |grep -o '[0-9.]*' ## ip ,[^ ]* ,[0-9.]*
ip a |grep inet |grep eth0 |grep -o "inet[^/]*" |grep -o "[0-9.]*" ## ip
ifconfig eth0 |grep -i hwaddr |awk '{print $5}' ## MAC
ip a |grep -A 3 "eth0" |grep link/ether |grep -o "ether[^r]*" |grep -o -E "[0-9a-f:]+"|grep -E "[0-9a-f:]{2}$" ## MAC
grep "^m" oldboy.log ## m
grep "m$" oldboy.log
grep -vn "^$" oldboy.log ##
grep -o "0*" oldboy.log
grep -o "oldb.y" oldboy.log
grep "\.$" oldboy.log ## .
grep "0\{3\}" oldboy.log ##
--sed--문법:sed[options]'command'파일
옵션:
-n 자동 인쇄 pattern space 억제,sed 기본 출력 모두,-n 기본 출력 취소 에 사용
-i 파일 편집
-r 확장 정규 표현 식 지원
1.변경:
문법:sed'/정규 일치 조건/s/old/new/g'파일
sed's/dhcp/static/g'/etc/sysconfig/network-script/ifcfg-eth 1\#\#표시 만 하고 수정 하지 않 습 니 다.
sed-i's/dhcp/static/g'/etc/sysconfig/network-script/ifcfg-eth 1\#\#수정 만 하고 표시 하지 않 음
sed-i's/dhcp/static/g'ip\#모든 dhcp 를 static 로 대체 합 니 다.
sed-i'/^IP1/s/static/dhcp/g'ip\#\#IP1 시작 줄 바 꾸 기
sed-i'2s/static/dhcp/g'ip\#\#특정 줄 번호 2 줄 바 꾸 기 지정
cat-n/etc/selinux/config\#\#줄 번호 보기 및 표시
sed-i'7s/disabled/enforcing/g'/etc/selinux/config\#\#selinux 열기
2.삭제:
문법:sed'/표현 식/d'파일
vim ip\#\#빈 줄 추가
sed'/^$/d'ip\#\#빈 줄 을 삭제 하고 화면 에 표시 합 니 다.
sed-i'/IP1/d'ip\#\#IP1 이 포 함 된 줄 삭제
sed-i'/^IP2/d'ip\#\#IP2 로 시작 하 는 줄 삭제
sed-i'2d'ip\#\#두 번 째 줄 삭제
3.증가:
문법:sed'/표현 식/a'추가 할 텍스트'파일
sed'a IP3=static'ip\#줄 마다 IP3=static 추가
sed'3a IP3=static'ip\#3 줄 뒤에 만 IP3=static 을 추가 하고 수정 하지 않 음 을 표시 합 니 다.
sed'3i IP3=static'ip\#3 줄 앞 에 만 IP3=static 을 추가 하여 수정 하지 않 음 을 표시 합 니 다.
sed-i'3a IP3=static'ip\#\#수정,표시 되 지 않 음
sed-i'/^IP3/a'test add'ip\#\#IP3 로 시작 하 는 줄 뒤에 추가
4.조사:
:sed -n '/ /p'
sed -n '2p' /etc/hosts ##
sed -n '/www/p' /var/named/chroot/var/named/linuxfan.cn.zone ## www
sed -n '/.100$/p' /var/named/chroot/var/named/linuxfan.cn.zone ## .100
sed -n '2~2p' ip ## ,
ifconfig eth0|sed -n '2p'|sed 's#.*dr:##g'|sed 's# Bc.*##g' ## : sed , / , sed , , # ;
10.0.0.9
ifconfig eth0|sed -n '2p'|sed -r 's#(.*dr:)(.*)(Bc.*$)#\2#g' ##-r ,\2 2 , (.*)
10.0.0.9
ifconfig eth0|sed -n '2p'|sed -r 's#.*dr:(.*) Bc.*$#\1#g'
10.0.0.9
ifconfig eth0|sed -nr '2s#^.*dr:(.*) Bc.*$#\1#gp'
10.0.0.9
ifconfig eth0|sed -nr '1s#^.*dr (.*)#\1#gp'
00:0C:29:33:C8:75
ifconfig eth0|sed -n '1p'|sed -r 's#(^.*dr )(.*)#\2#g'
00:0C:29:33:C8:75
ifconfig eth0|sed -n '1p'|sed 's#^.*dr ##g'
00:0C:29:33:C8:75
ifconfig eth0|sed -nr '1s#^.*t (.*) 00.*$#\1#gp'
HWaddr
stat /etc/hosts|sed -n '4p'
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
stat /etc/hosts|sed -n '4p'|sed 's#^.*ss: (##g'|sed 's#/-.*$##g'
0644
stat /etc/hosts|sed -n '4p'|sed -r 's#^.*s: \((.*)/-.*$#\1#g'
0644
stat /etc/hosts|sed -nr '4s#^.*s: \((.*)/-.*$#\1#gp'
0644
stat /etc/hosts|sed -nr '4s#(^.*s: \()(.*)(/-.*$)#\2#gp'
0644
--awk--
문법:awk[옵션]'모드{동작(action)}'파일 1 파일 2...
옵션:-F 입력 구분 자 를 지정 합 니 다.문자열 이나 정규 표현 식 일 수 있 습 니 다.
상용 동작:print,printf
chkconfig --list |grep 3: |awk '{print $1}'
tail -1 /etc/passwd |awk -F ':' 'BEGIN{OFS="---"}{print $1,$6,$7}' ##OFS
ifconfig eth1 |awk -F '[ :]+' 'NR==2 {print $4}'
ifconfig eth1 |awk -F '[ :]+' 'NR==2 {print "eth1_ip="$4}' ##
awk 'BEGIN {print "line one
line two
line three"}'
일치 범위(ranges):지정 한 일치 범위,형식 은 part 1,part 2 입 니 다.
awk -F : '$3==3,$3==10{print $1,$3,$7}' /etc/passwd
awk -F : '$1=="root",$1=="adm"{print $1,$3,$7}' /etc/passwd
awk -F : '/^r/,/^a/{print $1,$3,$7}' /etc/passwd
awk 블록 원리:영역 구성:
BEGIN{동작}\##첫 줄 텍스트 를 처리 하기 전 동작
{동작}\##줄 마다 텍스트 처리
END{동작}\#\#마지막 줄 텍스트 를 처리 한 후 동작
실행 절차:
우선 BEGIN{}블록 에서 초기 화 작업 을 수행 합 니 다.
그 다음 에 지정 한 데이터 파일 에서 데이터 줄 을 반복 해서 읽 고'모드 나 조건{동작}'을 실행 합 니 다.
마지막 으로 END{}블록 의 후속 처리 작업 을 수행 합 니 다.
사례:
awk -F : 'BEGIN{printf "%-10s%-10s%-20s
","UserName","ID","Shell"}{printf "%-10s%-10s%-20s
",$1,$3,$7}' /etc/passwd ## awk BEGIN{}
ifconfig eth0 |awk -F':' 'NR==2{print $2,$4}'|awk 'BEGIN{OFS=" / "}{print "IP="$1,"MASK="$3}'
awk 변수:awk 변수:
FS:열 구분자,기본 비트 공백
RS:줄 구분자,기본 줄 바 꾸 기
OFS:출력 열 구분자
ORS:출력 줄 구분자
awk 내장 변수:
NR:처리 중 줄 수
FNR:단일 파일 의 줄 수
NF:열의 개수
사례:
ifconfig eth1 |awk '{print NR}'
ifconfig eth1 |awk '{print NF}'
사용자 정의 변수 사례:
awk 'BEGIN{test="www.linuxfan.cn";print test}'
awk -v test="linuxfan.cn" 'BEGIN{print test}'
printf 사용:형식:printf"형식",목록 1,목록 2...
특징:
a.format(형식)을 지정 해 야 합 니 다.뒤쪽 item(목록)의 출력 형식 을 지정 해 야 합 니 다.
b.printf 문 구 는 줄 바 꿈 자 를 자동 으로 인쇄 하지 않 습 니 다:
c.format 형식 은%로 문 자 를 추가 합 니 다.다음 과 같 습 니 다.
%c:문자 표시 ASCII 코드
%d,%i:10 진수
%f:부동 소수점 보이 기(소수)
%s:문자열 보이 기
%u:부호 없 는 정수
%%:%표시
d.수정자:N:너비 표시,-:왼쪽 정렬,+:%-c(왼쪽 정렬)와 같은 수치 기 호 를 표시 합 니 다.
사례:
chkconfig--list|grep 3:|awk'{printf'%-10s',$1}'\#\#통일 줄 에 표시 하기
awk -F : '{printf "%-15s %-10d %-10s",$1,$3,$7}' /etc/passwd
awk 의 연산 자:
연산 자:x^y,x/y,x+y,x-y,x%y
비교 연산 자:>,<,>=,<=,==,!=
논리 연산 자:&,||,!
awk 에서 흔히 볼 수 있 는 패턴 종류
정규 표현 식(regexp):
awk -F : '/^u/{print $1}' /etc/passwd
표현 식(expression):값 이 0 이 아니 거나 비어 있 지 않 은 것 은 조건 을 만족 시 키 는 것 입 니 다.예 를 들 어$1~/foo/또는$1=="root"사례:
awk -F : '$3>=500{print $1,$3,$7}' /etc/passwd ##
awk -F : '$3+1<=100&&$3+1>=10{print $1,$3,$7}' /etc/passwd ##UID 10-100
awk -F : '$2=="!!"{print $1,$2}' /etc/shadow ##
passwd -d u01
awk -F : '$2==""{print $1}' /etc/shadow ##
awk -F : '$7~"bash$"{print $1,$3,$7}' /etc/passwd ## $7 bash
awk -F : '$7!~"bash$"{print $1,$3,$7}' /etc/passwd
총결산위 에서 말 한 것 은 소 편 이 소개 한 셸 스 크 립 트 의 정규 표현 식,grep,sed,awk 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ZSH에서 물고기까지ZSH는 수년 동안 내 기본 셸이었습니다. 이제 몇 달 동안 사용하면서 ZSH 구성에 대해 몇 가지 사항을 발견했습니다. 우리는 을 제공하는 시스템과 더 빨리 상호 작용하는 경향이 있습니다. 내.zshrc 구성에는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.