작성
·
265
1
명령어 sed를 다루는 강의를 보다가 의문점이 있어서 질문드립니다.
SP=$' ';TAB=%'\t';sed -E 's/'"(${SP}|${TAB})"'{2,5}.+$//' president.txt
질문 1.
위의 명령 줄에서 s/다음에 (${SP}|${TAB}) 양 쪽에 작은 따옴표와 큰 따옴표를 같이 붙여주셨는데 이유를 좀 자세히 설명 부탁드려도 될까요?
변수 SP와 TAB을 사용하기 위해서 큰 따옴표 ""를 붙여야할 것 같긴한데 작은 따옴표도 왜 같이 붙여야 되는지 잘 모르겠습니다.
질문 2.
그리고 SP와 TAB 변수를 선언할 때 앞에 $를 붙여주셨는데 이 것은 공백문자와 개행문자를 특수 문자 형태로 변수에 저장하기 위함인가요?
수업에서 큰따옴표만 써도 백슬래쉬 같은 건 특수 문자 의미가 억제되지 않는걸로 설명을 들었는데 여기선 왜 되지 않는지 궁금합니다.
양질의 강의 제공해주셔서 감사합니다.
답변 2
1
1
ultraraptor 님 안녕하세요?
질문주셨네요. 쉘 프로그래밍에서 가장 난해한 부분이 인용부호 사용입니다.
자! 찬찬히 설명드려볼게요
(질문1)
인용부호는 작은따옴표로 시작했다면 끝나는 부분도 작은따옴표입니다. 이건 이해하시는데 무리 없으시죠?
자 예시를 보시죠.
SP=$' ';TAB=%'\t';sed -E 's/'"(${SP}|${TAB})"'{2,5}.+$//' president.txt
(A) (B) (C)
(A) 's/'
(B) "(${SP}|${TAB})" . . . . . . 확장이 일어나도록 하는것이 목적(큰 따옴표를 이용)
(C) '{2,5}.+$//'
sed 명령어 앞에 echo 명령어를 추가해보세요. 그럼 궁금하신 부분이 해결될거에요.
bash-3.2$ SP=$' ';TAB=$'\t';echo sed -E 's/"(${SP}|${TAB})"{2,5}.+$//' president.txt
sed -E s/"(${SP}|${TAB})"{2,5}.+$// president.txt
bash-3.2$ SP=$' ';TAB=$'\t';echo sed -E 's/'"(${SP}|${TAB})"'{2,5}.+$//' president.txt
sed -E s/( | ){2,5}.+$// president.txt . . . . . . 확장이 일어나도록 하는것이 목적(큰 따옴표를 이용)
bash-3.2$
(질문2)
배쉬 매뉴얼에 보면 다음과 같은 설명이 있습니다
" Words of the form $'string' are treated specially. The word expands to
string, with backslash-escaped characters replaced as specified by the
ANSI C standard .... 중략 "
bash-3.2$ STR=$'Hello\nWorld'
bash-3.2$ echo "$STR" | hexdump -C
00000000 48 65 6c 6c 6f 0a 57 6f 72 6c 64 0a |Hello.World.|
0000000c
bash-3.2$ STR='Hello\nWorld'
bash-3.2$ echo "$STR" | hexdump -C
00000000 48 65 6c 6c 6f 5c 6e 57 6f 72 6c 64 0a |Hello\nWorld.|
0000000d
bash-3.2$
$' ' 은 인용부호 내부의 이스케이프된 문자가 그 효력을 유지하게끔 하기 위해서 사용한다는 것을 알 수 있습니다.
- 끝 -