일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Disk Partition
- Crack(Serial Key)
- javascript
- explorer
- FTP
- calculator
- Windows 10
- script
- apm
- 대항해시대
- LiveCD(USB)
- Network Info(Tool)
- Command
- UNIX
- Backup(Restore)
- H/W
- OS(operating system)
- SSH
- Linux
- Update
- portable
- MS Windows PE
- game
- MS windows
- webhard
- PC
- program
- web
- Programming
- network
- Today
- Total
<In Story>
Shell Script - sed 명령을 이용한 new line - 특정 문자열 (2) // [Unix] [Linux] [Script] [Programming] [Command] 본문
Shell Script - sed 명령을 이용한 new line - 특정 문자열 (2) // [Unix] [Linux] [Script] [Programming] [Command]
<In Story, Hi story, History> 2015. 5. 25. 13:13http://ktdsoss.tistory.com/136
지난 글에 이어서 이번에는 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) 개수를 알아야만 한다는 단점이 있습니다.