셸 스 크 립 트 잡기 (3)

7288 단어 shell각본
더 읽 기
1. 우 리 는 먼저 정규 표현 식 의 문자 적 의미 에 대한 기 초 를 익 힌 다.
^ 줄 시작 표시
$줄 끝 표시
임의의 문자 일치
[] 는 [] 에 포 함 된 임의의 문자 와 일치 합 니 다.
[^] 는 [^ 문자] 를 제외 한 임의의 문자 9 [^ 01] 와 일치 합 니 다. 92, 93 은 90, 91 과 일치 하지 않 습 니 다.
[-] 지정 한 범위 내의 문자 와 일치 합 니 다. [1 - 8] 1 - 8 안의 임의의 문자 와 일치 합 니 다.
?0 회 혹은 1 회 일치
+ 1 회 혹은 여러 번 일치
* 0 회 혹은 여러 번 일치
() 일치 하 는 문자열 만 들 기
{n} 일치 n 회
{n,} 최소 n 회
{n, m} n 과 m 사이
| 또는 관계 의 일치 ba (r | t) 는 bar 와 bat 를 일치 시 킬 수 있 습 니 다.
\전의 문자 a\. b 일치 a. b
2, grep 명령 사용 방법:
grep pattern filename  단일 파일
grep pattern file1 file2 file3 ...  여러 파일
egrep "[a - z] +"file 확장의 정규
egrep - o "[a - z]"는 일치 하 는 부분 만 출력 합 니 다.
grep - v pattern file 일치 결과 반전
grep - c patter 파일 일치 줄 수
다단 계 디 렉 터 리 에서 파일 검색:
grep "text". -R -n
대소 문자 무시
grep -i "helloW"
여러 스타일 일치
grep -e "this"  -e "key"-o
검색 에서 파일 을 제외 하거나 지정 합 니 다.
grep "main". -r --include *.{c,cpp}
grep "main". -r --exclude *.{c,cpp}
일치 하 는 줄 인쇄:
[root@ganglia 916]# seq 10 | grep 5 -A 2
5
6
7
[root@ganglia 916]# 

일치 하 는 결과 앞 두 줄
[root@ganglia 916]# seq  10 | grep 5 -B 2
3
4
5
[root@ganglia 916]# 

일치 하 는 결과 앞 뒤 두 줄
[root@ganglia 916]# seq 10 | grep 5 -C 2
3
4
5
6
7
[root@ganglia 916]# 

3. cut 명령 을 사용 합 니 다. cut 명령 은 파일 을 나 누 는 데 사 용 됩 니 다. 열 에 따라 쉽게 나 눌 수 있 습 니 다.
1, 특정 문자 cut - f filed 추출list filename
cut - f 2, 3 filename
[root@ganglia 916]# cut -f1 -d" " a.txt 
name
zhang
wang
li
[root@ganglia 916]# 

- d 뒤에 지정 한 경계 부호
- f 뒤에 여러 개의 숫자 를 쉼표 로 구분
[root@ganglia 916]# cut -f1,3 -d" " a.txt 
name score
zhang 100
wang 99
li 96
[root@ganglia 916]# cat a.txt 
name mark score
zhang 20 100
wang 36 99
li 12 96
[root@ganglia 916]# 

기타 용법:
N - N 번 째 바이트, 문자 또는 필드 에서 줄 끝까지
N - M. N 번 째 바이트 부터 M 번 째 바이트 까지.
- M 첫 번 째 바이트 부터 M 번 째 바이트 까지
바이트
- c 표시 문자
- f 정의 필드 에 사용
인쇄 전 5 글자:
[root@ganglia 916]# cat b.txt 
aafgdfdfdfdsfd
dffdsfag12343r3
fdfdfdgfgfgf
dfdgdtrasf
zzzzzzzz
ddfdfggdfdf
[root@ganglia 916]# cut -c1-5 b.txt 
aafgd
dffds
fdfdf
dfdgd
zzzzz
ddfdf
[root@ganglia 916]# 

인쇄 전 두 글자:
[root@ganglia 916]# cut b.txt -c -2
aa
df
fd
df
zz
dd
[root@ganglia 916]# 

여러 필드 출력 추출:
[root@ganglia 916]# cut b.txt  -c1-3,4-6 --output-delimiter "====>"   
aaf====>gdf
dff====>dsf
fdf====>dfd
dfd====>gdt
zzz====>zzz
ddf====>dfg
[root@ganglia 916]# 

4, sed 명령 사용
명령 sed 's/pattern/replace/' 파일 바 꾸 기
원본 텍스트 sed - i 's/pattern/replace/' 파일 바 꾸 기
모든 디 렉 터 리 sed - i 's/pattern/replace/g' 파일 교체
공백 줄 sed '/^ $/d' 파일 제거
일치 하 는 문자열 표시 가 있 습 니 다. 이 기능 은 하 이 라이트 가 가장 적 용 됩 니 다.
 
 
[root@ganglia 916]# echo "i am a red cat" | sed 's/red/\&\"/g'
i am a red" cat
[root@ganglia 916]# echo "i am a red cat" | sed 's/red/"&"/g'                
i am a "red" cat
[root@ganglia 916]#

: sed -e "pattern1" -e "pattern2"

shell sed ,
[root@ganglia 916]# text=hello
[root@ganglia 916]# echo hello world | sed "s/$text/big/"
big world
[root@ganglia 916]# 

5, awk 프로 그래 밍 사용
기본 문법: awk 'BEGIN {print "start"} pattern {commons} END {print "end"}  ' files
awk 스 크 립 트 를 주의 하 십시오. 작은 따옴표 로 묶 을 수도 있 습 니 다.
다음 예:
awk "BEGIN {i=0} {i++} END {print i}"filename
[root@ganglia 916]# echo -e "1
2
3" | gawk 'BEGIN {print " " } {print} END {print " "} ' 1 2 3 [root@ganglia 916]#

두 가 지 를 기억 해 야 합 니 다. print 인쇄 의 매개 변 수 는 쉼표 로 나 뉘 어 있 습 니 다. 기본 빈 칸 은 고정 부호 인 더 블 따옴표 로 조합 기호 로 사 용 됩 니 다.
NR 기록 수량, 현재 줄 번호 에 해당
NF 필드 수, 실행 중 현재 필드 수
$0 원본 내용
$n 제 n 열
[root@ganglia 916]# cat a.txt 
name mark score
zhang 20 100
wang 36 99
li 12 96
[root@ganglia 916]# gawk '{ print $1, $3}' a.txt 
name score
zhang 100
wang 99
li 96
[root@ganglia 916]# 

줄 번호 인쇄, 줄 수 통계
[root@ganglia 916]# gawk '{ print NR }' a.txt        
1
2
3
4

한 줄 읽 기 getline 사용 하기
[root@ganglia 916]# seq 6 | gawk 'BEGIN {getline; print "   :" $0} {print $0}'
   :1
2
3
4
5
6
[root@ganglia 916]# 

이 예 는 헤더 가 있 는 엑셀 이나 일부 텍스트 데 이 터 를 읽 는 데 매우 편리 합 니 다.
awk 의 유연 한 여과 조건
awk 'NR < 5' 줄 번호 5 이하 줄
awk 'NR = = 1, NR = = 4' 줄 번호 가 1 에서 5 사이 인 줄
awk '/linux/' linux 줄 포함
awk '!/linux/'linux 줄 포함 하지 않 음
필드 정의 문자 설정:
awk -F: '{ print $NF}'/etc/passwd
awk 지원 순환:
[root@ganglia 916]# gawk  'BEGIN{ for (i=0;i<=10;i++){ print i  } }'
0
1
2
3
4
5
6
7
8
9
10
[root@ganglia 916]# 

저희 가 배 운 C 와 JAVA, JavaScrpit 과 굉장히 가 깝 습 니 다.
awk 내장 함수
length () 문자열 길이
index () 출현 위치 되 돌리 기
split () 배열 해산
substr () 문자열 캡 처
sub () 교체
match () 일치
6. 열 에 따라 여러 파일 을 병합 합 니 다.
[root@ganglia 916]# cat c.txt 
1
2
3
4
[root@ganglia 916]# cat d.txt 
a
b
c
d
e
[root@ganglia 916]# pas
passwd  paste   
[root@ganglia 916]# pas
passwd  paste   
[root@ganglia 916]# paste c.txt  d.txt 
1       a
2       b
3       c
4       d
        e
[root@ganglia 916]# 

지정 한 분할 문자:
[root@ganglia 916]# paste c.txt  d.txt -d ","      
1,a
2,b
3,c
4,d
,e
[root@ganglia 916]# 

지정 한 범위 문자 캡 처
[root@ganglia 916]# seq 100 | gawk 'NR==4,NR==10'
4
5
6
7
8
9
10
[root@ganglia 916]# 

역순 출력 tac
[root@ganglia 916]# seq 5 | tac
5
4
3
2
1
[root@ganglia 916]# 

역순 출력 awk
[root@ganglia 916]# seq 5 | gawk '{ lifo[NR]=$0 } END{ for(lno=NR;lno>-1;lno--){print lifo[lno]} } ' 
5
4
3
2
1

[root@ganglia 916]# 

좋은 웹페이지 즐겨찾기