3. OS이야기/03. Shell Script

[UNIX/LINUX] Shell Script - sed 명령을 이용한 new line <-> 특정 문자열 (1)

알 수 없는 사용자 2014. 5. 7. 13:18

이번 글은 sed 명령어를 이용하여 new line(개행문자 \n)을 특정 문자열로 바꾸거나, 특정 문자열을 new line으로 변경하는 방법에 대한 글입니다.

 

Shell Script를 작성하다 보면 한꺼번에 많은 내용을 바꾸어야 할 때가 종종 발생하는데, 그 때 유용하게 쓰이는 명령어가 바로 이 'sed' 명령어죠.

 

sed와 비슷한 역할을 하는 명령어로 'tr' 이라는 명령어도 있습니다.

 

각자가 처한 상황에 맞게, 취향에 따라 골라 쓰시면 되는데요.

 

그러한 내용 변경 상황 중에서도 new line, 다시 말해 줄바꿈 상태를 특정 문자열로 변경하거나, 그 반대로 특정 문자열을 줄바꿈 상태로 바꿔야 하는 경우가 있습니다.

 

그럴 때 다음과 같이 사용하시면 되겠습니다.

 

(1) 특정 문자열 --> new line


# cat test.txt

11111,22222,33333,44444,55555



위와 같은 문자열들로 이루어진 txt 파일이 있다고 가정합니다.

 

위 컨텐츠 중, ','(comma)를 new line으로 바꾸고자 한다면 다음과 같이 수행합니다.


# sed 's/,/\

> /g' test.txt > test1.txt



sed 명령에서 's' 옵션은 'switch' 를 뜻하는 옵션으로 뒤에 나오는 /A패턴/을 /B패턴/으로 바꾸겠다는 뜻입니다.

 

제일 뒤의 'g' 옵션은 'global' 을 뜻하는 옵션으로 /A패턴/이 여러 개일 경우 전부 바꾸겠다는 뜻이죠.

 

이 옵션을 주지 않으면 제일 첫 번째에 나타나는 /A패턴/ 한 개 문자열만 바뀌게 됩니다.

 

위 예시에서는 /A패턴/ 자리에 바뀌어야할 기존 문자열인 ','(comma) 를 입력하였습니다.

 

/B패턴/ 자리에 new line 을 뜻하는 문자열 입력을 위해 '\'(back slash)를 입력한 후 실제 Enter 버튼을 눌러 줄바꿈을 해줍니다.

 

UNIX나 LINUX 의 프롬프트 상에서 위 명령을 실행할 경우, 줄이 바뀌었다는 표시인 '>'(redirection) 기호가 나타납니다.

 

그러면 나머지 global 옵션이라든가, 파일 이름 등을 나열해 줍니다.

 

핵심은 '\'(back slash)와 Enter key 누름이 되는 것이구요.

 

Shell Script 상에서는 '>'(redirection) 표시가 되지 않을 것이기에 Enter 버튼을 누른 후 나머지 구문을 완성해 주시면 됩니다.

 

이 때 한 가지 주의하실 것은 Shell Script 작성을 보기 좋게 하고자 tab 키나 space 키로 들여쓰기를 하는 경우가 있는데, 위와 같이 특정 문자열을 new line으로 바꾸는 sed 문장을 작성하실 경우, Enter key 누름 효과 이후에 tab 키나 space 키를 적용하면 안됩니다.


sed 's/,/\

    > /g' test.txt > test1.txt   --> (X)

----

└> space 적용 부분

 

sed 's/,/\

> /g' test.txt > test1.txt       --> (O)



위와 같이 정상적으로 sed 명령이 수행되었다면 다음과 같은 결과가 나타나게 되겠죠.


# cat test1.txt

11111

22222

33333

44444

55555



이상 특정 문자열을 new line으로 변경하는 방법에 대해 말씀 드렸구요.

 

다음 글에서는 그 반대인 new line을 특정 문자열로 변경하는 방법에 대해서 말씀 드리도록 하겠습니다.