지난 글에 이어서 이번에는 sed를 이용하여 new line을 특정 문자열로 변경하는 방법에 대해 말씀 드리도록 하겠습니다.
(2) new line --> 특정 문자열
# cat test.txt
11111
22222
33333
44444
55555
위와 같은 컨텐츠를 가진 txt 파일이 있다고 가정합니다.
위 컨텐츠에서 Enter가 적용된 부분(new line)을 ':'(colon)으로 변경하고자 한다면 다음과 같이 수행합니다.
# sed 'N;N;N;N;s/\n/:/g' test.txt
sed 명령에서 'N' 옵션은 줄바꿈문자(\n)를 /A패턴/ 공간에 더하고 입력의 다음 줄을 읽어 패턴 스페이스에 덧붙이겠다는 뜻입니다.
무슨 말인지 이해가 잘 되시나요?
사실 저는 아직도 완전히 이해가 되지는 않습니다.;;;;
문제 해결방안을 찾다보니 아래와 같이 한글로 된 URL을 찾았는데 그 글을 올리신 분이 정의해 놓은 것을 그냥 가져다 적은 것입니다.
(출처: http://wiki.kldp.org/Translations/html/Sed-KLDP/sedprograms.html#OVERVIEWOFREGULAREXPRESSIONSYNTAX)
아무튼 특정 문자열로 변경해야할 new line의 수만큼 'N' 옵션을 써주시면 되는데요.
이 옵션 사용 후 /A패턴/ 에 해당하는 부분에 개행문자인 '\n' 을 입력해 주시고 /B패턴/ 에 new line 대신 들어갈 문자열을 입력해 주시면 됩니다.
이렇게 하는 것이 제가 sed를 이용해서 new line을 특정 문자열로 변경하는 방법이라고 알아낸 것인데요.
한 가지 단점이..
위와 같은 예제에서 new line의 개수가 정확히 몇 개인지 확인이 가능하다면 모르겠지만, 개수 파악이 안되는 컨텐츠의 경우 어떻게 해야 할지 아직 찾지 못했습니다.;;;;
물론 'tr' 명령어를 사용하여 다음과 같이 구현해도 되긴 합니다.
cat test.out | tr "\n" ":" | cut -d ':' -f 1-5
하지만, 위 방법 역시도 '|'(pipe) 를 이용한 명령어의 길이가 길어지기도 하고 cut 명령 뒤에 '-f' 옵션으로 출력 컬럼을 정할 때에도 ':'(colon) 개수를 알아야만 한다는 단점이 있습니다.
'3. OS이야기 > 03. Shell Script' 카테고리의 다른 글
[UNIX/LINUX] 자동화를 위한 interactive 스크립트 - expect (2) 예제 (1) | 2014.05.14 |
---|---|
[UNIX/LINUX] 자동화를 위한 interactive 스크립트 - expect (1) 기본 사용법 (3) | 2014.05.13 |
[UNIX/LINUX] Shell Script - sed 명령을 이용한 new line <-> 특정 문자열 (1) (0) | 2014.05.07 |
[UNIX/LINUX] Shell Script 기본 - 5.case문 (1) 기본 사용법 및 예제 (0) | 2014.05.07 |
[UNIX/LINUX] Shell Script 기본 - 4.while문 (1) 기본 사용법 및 예제 (0) | 2014.05.02 |