카테고리 없음

[shell script] sed 사용법

말랑Cow 2021. 2. 16. 15:38
반응형

■ 특정 행 삭제/출력

sed -n '1p' a.txt				<== a.txt파일의 첫 행 출력
sed -n '1,3p' a.txt				<== a.txt파일의 1번행부터 3번행까지 출력
sed -n '8,$p' a.txt				<== a.txt파일의 8번행부터 끝행까지 출력
sed -n -e '1p' -e '8,$p' a.txt			<== a.txt파일의 1번행출력 및 8번행부터 끝행까지 출력
sed -n '/^abc/p' a.txt				<== abc로 시작하는 행들을 출력
sed -n '/abc/p' a.txt				<== abc를 포함하는 행들을 출력
sed '[Hh]ost/d' a.txt				<== Host 또는 host를 포함하는 라인 삭제


sed '3d' a.txt					<== 3번째 라인만 삭제하고 출력
sed '1,3d' a.txt				<== 1~3번째 라인 삭제하고 출력
sed '3,$d' a.txt				<== 3번째부터 마지막 라인까지 삭제하고 출력
sed '/root/d' a.txt				<== root가 포함된 라인만 삭제하고 출력
sed '3,10s/ABC//" a.txt			<== 3~10번째 행 중에서 ABC 삭제(원본파일 변경X)

 

■ 공백제거

sed '/^$/d' a.txt		<== 빈 라인들을 지운 후 출력
sed '/^ *$/d' a.txt		<== 빈 라인들이나 공백으로 채워진 행들을 삭제한 후 출력

■ 치환

sed 's/ABC/abc/g' a.txt				<== ABC라고 되어있는 부분을 abc로 치환
sed 's/[0-9][0-9]$/&.1/' a.txt			<== 라인의 마지막 두개의 숫자 뒤에 .1을 붙임
sed 's/^....//' a.txt				<== 각 행의 첫 4글자 삭제
sed 's/....$//' a.txt				<== 각 행의 마지막 4글자 삭제
sed 's#/test/test.sh#/test/test.c#g' a.txt	<== /test/test.sh를 /test/test.c로 치환
sed 's;/test/test.sh;/test/test.c;g' a.txt	<== /test/test.sh를 /test/test.c로 치환

sed '/start/,/end/s/ABC/abc/g" a.txt	<== start라는 단어를 포함하고있는 첫번째 라인부터 end를 포함하고있는 첫번째 라인까지 검색하면서 ABC라는 문자열을 모두 abc로 변경(end 이후 다시 start가 나오면 작업 반복)

 

■ 메타문자

/ABC/		ABC를 포함하고 있는 어떠한 라인과도 부합
/^ABC/		ABC로 시작하는 어떠한 라인과도 부합
/^$/		공백라인, 즉 라인의 시작과 끝 사이에 아무것도 없는 라인과 부합(스페이스가 들어간 라인과는 부합하지 않는다. 스페이스 자체가 문자로 인식)
/./			적어도 한 문자를 포함하고 있는 라인들과 부합
/a[bc]d/	abd또는 acd와 부합하지만 aed, afd 등과는 부합하지 않음
/a[^bc]d/	aed, afd 등과는 부합하지만 abd, acd 등과는 부합하지 않음
s/abc/p&p/	abc를 pabcp로 대체
반응형