grep, cut, awk, sed 텍스트 처리
간단 한 소개
셸 스 크 립 트 는
sed
, awk
, grep
, cut
등 아름 다운 도 구 를 조합 하여 텍스트 처리 와 관련 된 문 제 를 해결 할 수 있 습 니 다.정규 표현 식
정규 표현 식 은 텍스트 와 일치 하 는 형식 이 작고 맞 춤 형 프로 그래 밍 언어 입 니 다.어댑터 기술 만 으로 는 일치 할 수 있 는 텍스트 범위 가 상당히 제한 되 어 있 습 니 다.
정규 표현 식 기본 구성:
정규 표현 식
묘사 하 다.
^
줄 시작 표시
$
줄 끝 표시
.
임의의 문자 일치
[]
[] 에 포 함 된 임의의 문자 와 일치 합 니 다.
[^]
[^] 이외 의 임의의 문자 와 일치 합 니 다.
[-]
[] 범위 내의 임의의 문자 와 일치 합 니 다.
?
0 또는 1 회 반복
+
반복 > = 1 회
*
반복 > = 0 회
()
일치 하 는 하위 문자열 만 들 기
{n}
반복 n 회
{n, }
반복 > = n 회
{n,m}
n ~ m 회 반복
\
전의 문자
세로 줄
일치 하 는 세로 선 l 양쪽 임의의 항목
POSIX 문자 클래스
POSIX 문자 클래스 (POSIX character class) 는 특정한 문자 범위 와 일치 하 는 특수 원 시퀀스 입 니 다.
정규 표현 식
묘사 하 다.
밤.
[:alnum:]
알파벳 과 숫자 문자
[[:alnum:]]+
[:alpha:]
알파벳 문자
[[:alpha:]]{4}
[:blank:]
스페이스 바 와 탭 문자
[[:blank:]]*
[:digit:]
숫자 문자
[[:digit:]]?
[:lower:]
소문 자
[[:lower:]]{5,}
[:upper:]
대문자
([[:upper:]]+)?
[:punct:]
문장 부호
[[:punct:]]
[:space:]
모든 공백 문자
[[space:]]+
문자
메타 문자 (meta character) 는 Perl 스타일 의 정규 표현 식 으로 일부 텍스트 처리 도구 만 지원 합 니 다.
정규 표현 식
묘사 하 다.
밤.
\b
단어 경계
\ \ bcl \ \ b 는 cool 과 일치 하고 cooling 과 일치 하지 않 습 니 다.
\B
비 단어 경계
cool \ \ B 매 칭 cooling, cool 과 일치 하지 않 음
\d
단일 숫자 문자
b \ d 는 b2b 와 일치 하고 bcd 와 일치 하지 않 습 니 다.
\D
단일 비 숫자 문자
b \ \ Db 는 bcb 와 일치 하고 b2b 와 일치 하지 않 습 니 다.
\w
단일 단어 문자 (숫자, 자모 와)
\ w 일치 1 또는 a, 일치 하지 않 음 @
\W
단일 비 단어 문자
\ \ W 일치 @, 1 또는 a 와 일치 하지 않 음
\s
단일 공백 문자
x \ sx 매 칭 x x x, 일치 하지 않 음 xx
\S
단일 비 공백 문자
x \ \ Sx 는 xKx 와 일치 하고 xx 와 일치 하지 않 습 니 다.
줄 바 꿈 부호
새 줄 일치
\r
리 턴 카
\ r 매 칭 리 턴
# ipv4
[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
#
[\w]+@[\w]\.com
grep 로 파일 에서 텍스트 검색
grep
명령 은 유 닉 스에 서 텍스트 검색 에 사용 되 는 도구 로 정규 표현 식 과 마스크 를 받 아들 일 수 있 습 니 다.grep " / " file1 file2... --color=auto #
grep -E " " file
egrep " " file
grep -v #
grep -c #
grep -n #
grep -o #
grep -l " " file1 file2 #
grep -R #
grep -i #
grep -e " 1" -e " 2" #
grep -f match.txt file1 # match.txt
grep " " --include=*.{sh,txt} --exclude=*.log --exclude-dir=/home/user -r /home #
-A/-B n # / n
-C n # n
cut 로 열 별로 파일 나 누 기
cut
텍스트 를 열 에 따라 나 누 는 작은 도구 로 열 마다 경계선 을 지정 할 수 있 습 니 다.cut 용어 에 서 는 열 마다 필드 가 있 습 니 다.# '\t' cut
cut -d' ' -f1 1.txt #-d ,-f
cut -f1,2,3 # 1,2,3
-c ; -b ;
cut -c 1-5 1.txt # 1-5
cut -c -2 1.txt # 2
cut -c 3- # 3
특정 파일 의 단어 주파 수 를 통계 하 다.
# , sed,awk,grep
# , ,
egrep -o "\b[:alpha:]+\b" #
sed 입문
sed
는 stream editor (스 트림 편집기) 의 줄 임 말로 텍스트 처리 에서 매우 중요 한 도구 입 니 다.정규 표현 식 에 완벽 하 게 맞 춰 사용 할 수 있 습 니 다.#sed - stream editor for filtering and transforming text
# / sed
#
#sed 's/ / /'
sed 's/pattern/repalce/' file #
sed -i 's/pattern/repalce/' file # file
echo "1.txt" > 1.txt && sed 's/txt/haha' 1.txt # haha txt
sed -i 's/txt/haha/' 1.txt # 1.txt txt haha
#-i
echo "hahaha" | sed 's/ha/HA/g' #
echo "hahaha" | sed 's/ha/HA/2g' # , 2
#
sed '/pattern/d
sed '/^$/d' ##
# sed &
echo "A wonderful goal" | sed 's/\w\+/[&]/g' #\w\+
# \1,\2...
echo "1st 2nd 3rd" | sed 's/\(\w\+\) \(\w\+\) \(\w\+\)/\2 \1 \3/'
2nd 1st 3rd
# \2 \1 ,(),+ sed ,
#
sed 'expression1; expression2; ...
echo "aabbcc" | sed 's/a/A/; s/b/B/; s/c/C/g'
AaBbCC
# " " ( $ ),
# ' ' ( )
#
text=hello
echo 'hello world' | sed "s/$text/HELLO/"
HELLO world
awk 입문
awk
데이터 흐름 에 사용 하도록 설계 되 어 열 과 줄 을 조작 할 수 있다.#awk ‘begin{print "start"} pattern {command} end{print "end"}’ file
awk '{sum += $1}; {print sum}'
#awk :begin 、end (pattern)
#3
#awk stdin
cat /etc/passwd | awk -F: '{print $1}' #-F
#awk
#NR: (number of records),
#NF: (number of fields),
#$0:
#$1,$2...$NF: 1 /2 .../
echo -e "L1 1
L2 22
L3 333" | awk '{print NR NF $0 $1 $2}'
# NR NF $0 $1 $2 $NF= =$2
1 2 L1 1 L1 1 1
2 2 L2 22 L2 2 2
3 2 L3 333 L3 3 3
# awk
#-v awk
# -v var=val --assign=var=val
var='12345'
echo | awk -v v1=$var '{print v1}'
#
var1=111; var2=222
echo | awk '{print v1,v2}' v1=$var1 v2=$var2
#
awk '{print v1,v2}' v1=$var1 v2=$var2 file
# awk
awk 'NR < 3,NR==4' 1.txt # <5
awk '/linux/' 1.txt # linux ( re)
awk '!/linux/' 1.txt #! linux
#
awk -F: '{print $1}' /etc/passwd
awk '{FS=":"} {print $1}' /etc/passwd
awk '{FS=":"; print $1}' /etc/passwd
# awk , getline
echo | awk '{"grep root /etc/passwd" | getlin out; print out}'
root:x:0:0:root:/root:/bin/bash
# awk
awk '{for(i=1;i<4;i++) {print $i}}' 2.txt # 1,2,3
파일 의 줄, 단어, 문 자 를 교체 합 니 다.
#
echo -e "1
22
333" | while read line;do echo $line;done
grep "bash" /etc/passwd | while read line;do echo $line;done
#1
#22
#333
#
echo "1 22 333" | while read line;do for word in $line;do echo $word;done;done
#1
#22
#333
#
echo "abc" | while read line;
do
for word in $line;
do
for((i=0;i
열 별로 파일 병합
paste
명령 을 사용 하여 열 연결 을 실현 할 수 있 습 니 다.#paste - merge( ) lines of files
echo -e "1
2
3" > 1.txt && echo -e "Line1
Line2
Line3" > 2.txt
paste 1.txt 2.txt
1 Line1
2 Line2
3 Line3
# , -d
paste 1.txt 2.txt -d','
파일 이나 줄 의 n 번 째 단어 나 n 열 을 인쇄 합 니 다.
awk -F':' '{print $1,$3}' file1
cut -d':' -f 1,3 file1
동행 하지 않 거나 스타일 사이 의 텍스트 인쇄
awk 'NR==1,NR==10' /etc/passwd
awk 'NR==1,NR==10' /etc/passwd | awk -F":" '{print $1,$NF}' #
awk '/start_pattern/, /end_pattern/' file # start end , re
awk '/root/, /zhang/' /etc/passwd # root zhang
awk '/^ro.?t/, /bash$/' /etc/pass
역순 으로 줄 인쇄
사용 가능
awk
, tac
완료.tac 는 거꾸로 cat 입 니 다.#tac - , tac
tac 1.txt
awk '{lifo[NR]=$0; lno=NR} END{ for(;lno>-1;lno--) {print lifo[lno]};}' 1.txt
텍스트 의 전자 우편 과 URL 분석
주어진 파일 에서 필요 한 텍스트 를 분석 하 는 것 은 우리 가 텍스트 처리 에 종사 할 때의 작업 입 니 다.
#egrep
#
egrep -o '[a-zA-Z0-9.]+@[0-9a-zA-Z.]+\.[a-zA-Z]{2,4}' emails.txt
# URL
egrep -o "http://[a-zA-Z0-9.]+\.[a-zA-Z]{2,3}" urls.txt
어떤 스타일 을 인쇄 하기 전 / 이후 n 줄
grep "zhang" /etc/passwd -A 5 #Ater
grep "zhang" /etc/passwd -B 5 #Before
grep "zhang" /etc/passwd -C 5 #
파일 에서 어떤 단 어 를 포함 하 는 문장 을 제거 합 니 다.
올 바른 정규 표현 식 (Regular Expression) 만 쓸 수 있다 면 손 쉽게 잡 을 수 있다.
sed 's/[^.]*handsome boy[^.]*\.//g' file.txt # .
텍스트 절편 과 매개 변수 조작
#
var="One two three"
echo ${var/t/T} #
#One Two three
#
#${ : : }
${vari:start:length}
echo {var:0:2} #On
echo {var:1:6} #ne two
# 0, -1
echo ${var:(-1)} #e
echo ${var:(-3):3} #ree
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.