셸 스 크 립 트 - 정규 표현 식 과 텍스트 프로세서 (grep, sed, awk 용법)
2. 기초 정규 표현 식
1、grep
grep -n 'the' test.txt ## ‘the’
grep -in 'the' test.txt ##
grep -n '*' test.txt ## *
grep -n 'sh[io]rt' test.txt ## short shirt
grep -n 'oo' test.txt ## oo
grep -n '[^w]oo' test.txt ## w oo
grep -n '^[a-zA-Z]' test.txt ## a z A Z
grep -n '[^a-z]oo' test.txt ## oo a-z
grep -n '[0-9]' test.txt ##
- v 는 '[^]' 와 차이 가 있어 요.
grep -n '\.$' test.txt ## .
grep -n '^[a-z]' test.txt ## a-z
grep -n '^[^a-zA-Z]' test.txt ## a-z A-Z
grep -n‘^$’test.txt ##
grep -n 'w..d' test.txt ##wd 2
grep -n 'ooo*' test.txt ##* 0
grep -n 'woo*d' test.txt ## w d , o
grep -n 'w.*d' test.txt ## w d ,
* ,
grep -n 'o\{2\}' test.txt
② 조 회 는 w 로 시작 하여 d 로 끝나 고 중간 에 o 문자열 2 ~ 5 개 를 포함 합 니 다.
grep -n 'wo\{2,5\}d' test.txt
③ 조 회 는 w 로 시작 하여 d 로 끝나 고 중간 에 2 개 또는 2 개 이상 의 o 문자열 이 포함 되 어 있 습 니 다.
grep -n 'wo\{2,\}d' test.txt
2, 정규 표현 식 확장 (egrep)
: “egrep -n 'wo+d' test.txt” ## "wood" "woood" "woooooood"
grep -n ‘woo*d’test.txt grep -n ‘wo\{1,\}d’test.txt
? 역할: 0 개 또는 하나의 앞 글자
: “egrep -n 'bes?t' test.txt” ## “bet”“best”
grep -n 'wo\{0,1\}d' test.txt
| 역할: 사용 또는 (or) 방식 으로 여러 문 자 를 찾 습 니 다.
: “egrep -n 'of|is|on' test.txt” ## "of" "if" "on"
() 역할: "그룹" 문자열 찾기
:“egrep -n 't(a|e)st' test.txt”。 “a” “e” “()” , “|” , "tast" "test"
() + 역할: 여러 중복 되 는 그룹 을 판별 합 니 다.
:“egrep -n 'A(xyz)+C' test.txt” ## "A" "C", "xyz"
3. 텍스트 프로세서 sed
sed
sed 、
1. sed 명령
2. 용법 예시
sed -n 'p' test.txt ## , cat test.txt
sed -n '3p' test.txt ## 3
sed -n '3,5p' test.txt ## 3~5
sed -n 'p;n' test.txt ## ,n
sed -n 'n;p' test.txt ## ,n
sed -n '1,5{p;n}' test.txt ## 1~5 ( 1、3、5 )
sed -n '10,${n;p}' test.txt ## 10
sed -n '/the/p' test.txt ## the
sed -n '4,/the/p' test.txt ## 4 the
sed -n '/the/=' test.txt ## the , (=)
sed -n '/^PI/p' test.txt ## PI
sed -n '/[0-9]$/p' test.txt ##
sed -n '/\/p' test.txt## wood ,\<、\>
nl test.txt | sed '3d' ## 3
nl test.txt | sed '3,5d' ## 3~5
nl test.txt | sed '/cross/d'## cross , 8 ;
cross , ! , '/cross/!d'
sed '/^[a-z]/d' test.txt ##
sed '/\.$/d' test.txt ## "."
sed '/^$/d' test.txt ##
, ,
“sed -e‘/^$/{n;/^$/d}’test.txt” ## “cat -s test.txt” ,n 。
sed 's/the/THE/' test.txt ## the THE
sed 's/l/L/2' test.txt ## 2 l L
sed 's/the/THE/g' test.txt ## the THE
sed 's/o//g' test.txt ## o ( )
sed 's/^/#/' test.txt ## #
sed '/the/s/^/#/' test.txt ## the #
sed 's/$/EOF/' test.txt ## EOF
sed '3,5s/the/THE/g' test.txt ## 3~5 the THE
sed '/the/s/o/O/g' test.txt ## the o O
sed '/the/{H;d};$G' test.txt ## the ,{;}
sed '1,5{H;d};17G' test.txt ## 1~5 17
sed '/the/w out.file' test.txt ## the out.file
sed '/the/r /etc/hostname' test.txt ## /etc/hostname the
sed '3aNew' test.txt ## 3 , New
sed '/the/aNew' test.txt ## the , New
sed '3aNew1
New2' test.txt ## 3 , \n
sed '1,5{H;d};17G' test.txt // 1~5 17
vi opt.list
1,5H ---
1,5d ---
17G ---
sed -f opt.list test.txt --
, vsftpd , , ( )。
[root@localhost ~]# vim local_only_ftp.sh
#!/bin/bash
# 、
SAMPLE="/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf " CONFIG="/etc/vsftpd/vsftpd.conf"
# , /etc/vsftpd/vsftpd.conf.bak , cp
[ ! -e "$CONFIG.bak" ] && cp $CONFIG $CONFIG.bak # ,
sed -e '/^anonymous_enable/s/YES/NO/g' $SAMPLE > $CONFIG
sed -i -e '/^local_enable/s/NO/YES/g' -e '/^write_enable/s/NO/YES/g' $CONFIG grep "listen" $CONFIG || sed -i '$alisten=YES' $CONFIG
# vsftpd ,
systemctl restart vsftpd systemctl enable vsftpd
[root@localhost ~]# chmod +x local_only_ftp.sh
4. awk 도 구 는 입력 텍스트 를 한 줄 씩 읽 고 지정 한 일치 모드 에 따라 찾 습 니 다.
조건 에 맞 는 내용 을 포맷 출력 하거나 여과 처리 하면 상호작용 이 없 는 상태 에서 상당히 복잡 한 텍스트 작업 을 실현 할 수 있다.
1. awk 흔 한 용법
2. 용법 예시
awk '{print}' test.txt ## , cat test.txt
awk '{print $0}' test.txt ## , cat test.txt
awk 'NR==1,NR==3{print}' test.txt ## 1~3
awk '(NR>=1)&&(NR<=3){print}' test.txt ## 1~3
awk 'NR==1||NR==3{print}' test.txt ## 1 、 3
awk '(NR%2)==1{print}' test.txt ##
awk '(NR%2)==0{print}' test.txt ##
awk '/^root/{print}' /etc/passwd ## root
awk '/nologin$/{print}' /etc/passwd ## nologin
awk 'BEGIN {x=0};/\/bin\/bash$/{x++};END {print x}' /etc/passwd
## /bin/bash , grep -c "/bin/bash$" /etc/passwd
awk 'BEGIN{RS=""};END{print NR}' /etc/squid/squid.conf
##
awk '{print $3}' test.txt ## ( ) 3
awk '{print $1,$3}' test.txt ## 1、3
awk -F : '$2==""{print}' /etc/shadow ## shadow
awk 'BEGIN {FS=":"}; $2==""{print}' /etc/shadow
## shadow
awk -F : '$7~"/bash"{print $1}' /etc/passwd
## 7 /bash 1
awk '($1~"nfs")&&(NF==8){print $1,$2}' /etc/services
## 8 1 nfs 1、2
awk -F : '($7!="/bin/bash")&&($7!="/sbin/nologin"){print}' /etc/passwd
## 7 /bin/bash /sbin/nologin
awk -F: '/bash$/{print | "wc -l"}' /etc/passwd
## wc -l bash , grep -c "bash$" /etc/passwd
awk 'BEGIN {while ("w" | getline) n++ ; {print n-2}}'
## w ,
awk 'BEGIN { "hostname" | getline ; print $0}'
## hostname,
5. sort 도구 에서 자주 사용 하 는 파일 정렬 도구: sort, uniq
1: /etc/passwd 。
[root@localhost ~]# sort /etc/passwd
2: /etc/passwd 。
[root@localhost ~]# sort -t ':' -rk 3 /etc/passwd
3: /etc/passwd , user.txt 。
[root@localhost ~]# sort -t ':' -k 3 /etc/passwd -o user.txt
[root@localhost ~]# cat user.txt
도구
1: testfile 。
[root@localhost ~]# cat testfile
Linux 10
Linux 20
Linux 30
Linux 30
CentOS 6.5
CentOS 6.5
CentOS 7.3
CentOS 7.3
[root@localhost ~]# uniq testfile
Linux 10
Linux 20
Linux 30
CentOS 6.5
CentOS 7.3
2: testfile , 。
[root@localhost ~]# uniq -c testfile
3: testfile 。
[root@localhost ~]# uniq -d testfile
도구
표준 입력 에서 온 문 자 를 교체, 압축, 삭제 하 는 데 자주 사용 된다.한 그룹의 문 자 를 바 꾼 후에 다른 그룹의 문자 로 바 꿀 수 있 습 니 다. 항상 아름 다운 단일 명령 을 만 드 는 데 사 용 됩 니 다.
1: 。
[root@localhost ~]# echo "KGC" | tr 'A-Z' 'a-z'
kgc
2: 。
[root@localhost ~]# echo "thissss is a text linnnnnnne." | tr -s 'sn'
this is a text line.
3: 。
[root@localhost ~]# echo 'hello world' | tr -d 'od'
hell wrl
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.