[CentOS 8] sed 명령어
1. SED (Stream Editor)
sed
는 텍스트를 편집하는 명령어로, 기본적으로 원본 파일을 변화시키지 않는다. sed는 패턴버퍼 와 홀드버퍼 를 갖는다. 입력한 파일의 내용이 패턴버퍼로 들어간다. 패턴버퍼의 데이터를 편집하기 위해 홀드버퍼가 사용되며, 편집된 내용은 다시 패턴버퍼에 저장된다.
-n
옵션은 패턴버퍼의 내용을 출력하지 않게 해준다.
-e
옵션은 사용할 패턴이 여러개일 때 사용된다.
-i
옵션은 변화된 내용을 원본파일에 적용하기 위해 사용된다.
2. SED 패턴
test.txt 라는 파일이 있다고 가정하자.
p는 패턴에 해당되는 행을 출력한다.
d 는 패턴에 해당되는 행을 삭제한다. 아래 예시에서 p를 d로 바꾸면 된다.
sed -n '1p' test.txt # 1행 출력
sed -n '1,$p' test.txt # 1~마지막 행 출력
sed -n -e '1p' -e '3,$p' test.txt # 1행, 3~마지막행 출력
sed -n '/abc/p' test.txt # abc가 포함된 행 출력
sed -n '/^abc/p' test.txt # abc로 시작하는 행 출력
sed -n '/acb$/p' test.txt # abc로 끝나는 행 출력
sed -n '/A/,/B/p' test.txt # A가 나온 행부터 B가 나온 행까지 출력
sed -n '3,/A/p' test.txt # 3행부터 A가 나오는 행까지 출력
s 는 치환하기 위해 사용된다. s/패턴1/패턴2/범위
형식으로 사용된다.
패턴2에서 사용되는 & 는 패턴1을 의미한다.
sed 's/A/B/g' # 전체 행에서 A를 B로 바꾼다
sed 's/A/B/3g' # 3행 이후부터 A를 B로 바꾼다
sed '1,3 s/A/B' # 1,3행에서 A를 B로 바꾼다
sed 's/A/&B/g' # 전체 행에서 A를 AB로 바꾼다.
sed에서 태그를 사용할 수 있다. 대상분류는 \(
와 \)
로 감싸며, \1, \2
와 같이 출력한다.
echo "1234Hello5678" | sed "s/....\(Hello\)..../\1/g" # Hello
r 은 외부 파일의 내용을 읽는다.
sed '/A/r addfile.txt' test.txt
위의 예시는 test.txt 에서 A를 검출하면 그 다음 행에 addfile.txt 의 내용을 붙인다.
w 는 검출된 내용을 파일로 저장한다.
sed '/A/w outputfile.txt' test.txt
test.txt 에서 A가 검출된 행들을 outputfile.txt 에 저장한다. 이거보단 리다이렉션을 쓰는게 더 편할 듯 하다.
\a 는 검출된 행 다음행에 내용을 추가한다.
sed '/A$/a\B' test.txt
test.txt 에서 A로 끝나는 행을 검출하면 그 다음 행에 B를 추가한다.
댓글남기기