SED 메뉴얼의 2탄!
5.4 SED의 커맨드
앞에서는 (안내서 1편은 여기 클릭) SED의 문법 중에 p, s 와 같은 커맨드를 알아 보았는데요, 그 외에는 d (delete), q (quit) 등의 커맨드가 더 존재합니다. 예제를 보면서 SED의 커맨드를 정리해 보겠습니다.
a는 append (덧붙이기) 입니다. a 커맨드 다음의 문자열을 매칭된 패턴 다음에 붙이는 역할을 합니다. 위의 예제에서는 1~5번 라인에 대해 hello라는 문자열 줄을 삽입하는 예제 입니다.
a가 패턴 다음에 붙이는 역할이라면, i는 패턴 이전에 삽입하는 역할입니다 (insert). 즉 위의 예제는 1~5번 줄에 대하여 hello라는 문자열 줄을 input.txt의 1~5번 각각의 줄의 이전에 삽입하는 역할 입니다.
c는 줄 전체를 바꾸는 (change) 커맨드 입니다. 즉 매칭된 패턴이 있는 줄을 c 다음에 오는 문자열로 치환하는 것이죠. 위의 예제에서는 abc라는 패턴이 존재하는 줄에 대하여 그 줄을 hello라는 문자열로 치환합니다.
이밖에 s는 치환 (substitute)을 나타내며, 튜토리얼 1탄에서 자세히 다루었으므로 생략합니다.
5.5 그룹 지정
그룹 지정은 중괄호 {} 를 통해서 합니다. 여러개의 커맨드를 중괄호 사이에 묶어 한방에 처리할 수 있는 강력한 기능입니다. 단 주의할 점은 각 커맨드는 각각 새로운 줄에 위치해야만 한다는 것이죠. 다음의 예제는 1~5번 줄을 읽어서 abc패턴을 삭제하고 빈줄을 삭제한 뒤 해당 라인을 출력하는 예제입니다.
sed 문법은 자주 안쓰면 금방 또 잊게 되어서, 이렇게 정리해 보았습니다. 다음엔 awk를 정리해 봐야겠습니다.
5.4 SED의 커맨드
앞에서는 (안내서 1편은 여기 클릭) SED의 문법 중에 p, s 와 같은 커맨드를 알아 보았는데요, 그 외에는 d (delete), q (quit) 등의 커맨드가 더 존재합니다. 예제를 보면서 SED의 커맨드를 정리해 보겠습니다.
sed -n '1,10 p' input.txtp 커맨드는 print (출력) 입니다. 즉, 위의 예제는 1번부터 10번째 라인까지만 프린트 하기입니다. (-n 옵션 때문에 매칭이 되는 1~10 라인 외에는 출력되지 않는다.) 만약 sed '1,10 p' 라고만 한다면, 1~10번째 라인이 출력된 후에 다시 1번부터 끝까지의 모든 라인이 출력됩니다.
sed -n '11,$ !p' input.txt커맨드 앞에 ! (느낌표)를 붙여서 반대의 기능을 수행하는 경우가 있습니다. 즉 여기서, !p 는 매칭되는 라인에 대해서만 프린트를 하지 않는다 라는 뜻 입니다. 따라서 11번째 줄부터 끝까지에 대해서는 출력하지 않는 것이 되고, 출력하지 않는 다라는 전체 커맨드에 대해 -n 옵션이 붙어서 결국은 1~10번째 줄만 출력하라는 위의 예제와 동일한 결과를 나타내게 됩니다.
sed '11,$ d' input.txtd 커맨드는 delete (삭제) 입니다. 즉, 위의 예제에서는 11번째 줄부터 끝까지에 대해서 삭제를 한 결과를 출력합니다. 다시 말해 1~10번 줄만을 출력하는 것으로 결국은 앞에서의 예제와 같은 기능입니다.
sed '1,10 !d' input.txt역시 느낌표를 붙여서 1~10번 줄에 대해 삭제를 하지 않는다라는 것에 대한 결과로, 위의 예제 역시 1~10번 줄만을 출력하는 명령어 입니다. 차이점은 -n 옵션이 없더라도 삭제하지 않는 것에 대한 매칭인 1~10번 줄만 출력한다는 것이죠. 말이 좀 어렵긴 한데, 예를 들면 sed -n '1,10 !d' 는 아무것도 출력하지 않습니다.
sed -e '10,$ p' -e '5 q' input.txtq는 quit (종료) 입니다. 즉, 간단하게 매칭되는 부분 까지 수행하고 매칭을 종료할 때 사용합니다. 위의 예제는 10번부터 끝까지 라인을 출력한 후에 그 결과에 대해서 앞의 5개의 라인만을 출력하는 예제입니다. '5 q'는 총 5개의 라인을 처리하고 종료하라는 뜻 입니다.
sed '10 r blah' input.txtr은 read (읽기) 입니다. r 다음에 오는 문자열이 파일명을 나타냅니다. 즉 r blah는 blah 라는 파일을 읽으라는 뜻이고, 위에 예제에서는 input.txt 를 읽어서 출력을 하다가 10번째 라인에 도달하면 blah라는 파일을 읽어서 결과를 출력하게 됩니다. 즉, 최종 결과는 input.txt의 1~10번 라인이 나오고, blah 파일의 내용이 나온 뒤 다시 input.txt의 11번 부터 끝까지의 내용이 출력됩니다.
sed '1,5 w out.txt' input.txtw는 write (쓰기) 입니다. r과 비슷하게 파일명이 커맨드 다음에 나오고, 매칭된 결과값을 파일에 쓸 수 있습니다. 위의 예제는 input.txt 의 1~5번 라인을 out.txt 에 저장하는 예제 입니다.
sed '1,5 a hello' input.txt
a는 append (덧붙이기) 입니다. a 커맨드 다음의 문자열을 매칭된 패턴 다음에 붙이는 역할을 합니다. 위의 예제에서는 1~5번 라인에 대해 hello라는 문자열 줄을 삽입하는 예제 입니다.
sed '1,5 i hello' input.txt
a가 패턴 다음에 붙이는 역할이라면, i는 패턴 이전에 삽입하는 역할입니다 (insert). 즉 위의 예제는 1~5번 줄에 대하여 hello라는 문자열 줄을 input.txt의 1~5번 각각의 줄의 이전에 삽입하는 역할 입니다.
sed '/abc/ c hello' input.txt
c는 줄 전체를 바꾸는 (change) 커맨드 입니다. 즉 매칭된 패턴이 있는 줄을 c 다음에 오는 문자열로 치환하는 것이죠. 위의 예제에서는 abc라는 패턴이 존재하는 줄에 대하여 그 줄을 hello라는 문자열로 치환합니다.
이밖에 s는 치환 (substitute)을 나타내며, 튜토리얼 1탄에서 자세히 다루었으므로 생략합니다.
5.5 그룹 지정
그룹 지정은 중괄호 {} 를 통해서 합니다. 여러개의 커맨드를 중괄호 사이에 묶어 한방에 처리할 수 있는 강력한 기능입니다. 단 주의할 점은 각 커맨드는 각각 새로운 줄에 위치해야만 한다는 것이죠. 다음의 예제는 1~5번 줄을 읽어서 abc패턴을 삭제하고 빈줄을 삭제한 뒤 해당 라인을 출력하는 예제입니다.
sed -n '1,5 {6. 마치며
s/abc//
/^$/ d
p
}' input.txt
sed 문법은 자주 안쓰면 금방 또 잊게 되어서, 이렇게 정리해 보았습니다. 다음엔 awk를 정리해 봐야겠습니다.




