셸 스 크 립 트 의 정규 표현 식,grep,sed,awk

10570 단어 shellgrepsedawk
--정규-
기초 정규
^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 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기