inflearn logo
강의

講義

知識共有

Linuxシェルスクリプトマスター

sed 명령어 강의에서 사용된 예제 중 질문이 있습니다.

435

SodiumSulfate

投稿した質問数 8

1

명령어 sed를 다루는 강의를 보다가 의문점이 있어서 질문드립니다.

SP=$' ';TAB=%'\t';sed -E 's/'"(${SP}|${TAB})"'{2,5}.+$//' president.txt

질문 1.

위의 명령 줄에서 s/다음에 (${SP}|${TAB}) 양 쪽에 작은 따옴표와 큰 따옴표를 같이 붙여주셨는데 이유를 좀 자세히 설명 부탁드려도 될까요?

변수 SP와 TAB을 사용하기 위해서 큰 따옴표 ""를 붙여야할 것 같긴한데 작은 따옴표도 왜 같이 붙여야 되는지 잘 모르겠습니다.

질문 2.

그리고 SP와 TAB 변수를 선언할 때 앞에 $를 붙여주셨는데 이 것은 공백문자와 개행문자를 특수 문자 형태로 변수에 저장하기 위함인가요? 시스템 생성 대체 텍스트:
큰 따옴표( DOUBLE QUOTES ) 
• 그 안의 텍스트가 여러 단어나 인수로 분리되지 않도록 보호합니다 
큰 따옴표 내의 문자들을 대체 
(Substitution)하는 것이 가능하다. 
\(백 슬래시). $(달러). ` (백틱) 를 
제외한 대부분의 다른 특수 문자의 의미는 
억제됩니다(즉, 일반문자로 해석됩니다).

수업에서 큰따옴표만 써도 백슬래쉬 같은 건 특수 문자 의미가 억제되지 않는걸로 설명을 들었는데 여기선 왜 되지 않는지 궁금합니다.

양질의 강의 제공해주셔서 감사합니다.

linux shell-script

回答 2

1

SodiumSulfate

이해하는데 큰 도움되었습니다. 감사합니다~

1

guileschool

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$

$' ' 은 인용부호 내부의 이스케이프된 문자가 그 효력을 유지하게끔 하기 위해서 사용한다는 것을 알 수 있습니다.

- 끝 -

59회차 학습 미작동

0

65

2

BASH_REMATCH 변수가 어디서 나온거죠?

1

913

1

${object%%:*}, ${object#*:}는 어떤 뜻인가요

2

396

1

./euid.sh

2

397

1

touch 'Gone with the wind.mp3' 입력 결과가 다릅니다

1

363

1

스크립트에서 %는 무엇을 의미하나요?

1

519

1

하드 링크, 심볼릭 링크

1

690

2

[..]와 테스트 강의에서

1

388

1

하드 링크, 심볼릭 링크

0

631

1

변수명이 출력되지 않습니다.

1

284

1

변수명 출력이 되지 않습니다.

0

345

1

select in case문 질문

0

230

1

crontab 질문이 있습니다.

1

224

2

(..)_(..) 와 BASH_REMATCH

1

747

1

^[.+] 정규표현식이 RegExr 를 나타내는게 맞나요?

1

387

2

실습자료를 다운받은 다음에 어떻게 해야 하나요?

0

435

3

sudo cp helloworld.sh /usr/bin 명령어 질문

1

603

1

read -p 명령어가 동작하지 않습니다.

2

350

1

wc 명령어에 -L 옵션이 동작하지 않습니다.

1

436

1

book이 변수가 아니라 파일인가요?

1

355

1

sed 관련 질문

1

639

2

파일접근권한 강의

1

143

1

[] 결과

2

210

1

# (주석) 관련 질문 드립니다.

1

163

1