"sed 's~ ~~g'" 명령에서 "~"의 기능은 무엇입니까? [복사]

"sed 's~ ~~g'" 명령에서 "~"의 기능은 무엇입니까? [복사]

sed 's~ ~~g'Linux 시스템의 쉘 스크립트에서 한 줄을 찾았습니다 . 이건 뭐죠 ~?

답변1

sed이것은 Alternative() 명령에 대한 대체 구분 기호입니다 s. 일반적으로 에서 s/pattern/replacement/와 같이 슬래시가 사용되지만 sed거의 모든 문자가 허용됩니다.

/대체 표현식에 다른 구분 기호를 사용하는 주된 이유 sed는 표현식이 리터럴 /문자에 대해 작동하기 때문입니다.

예를 들어 경로를 /some/path/here다음으로 바꾸 /other/path/now려면

s/\/some\/path\/here/\/other\/path\/now/

이는 일반적으로 다음과 같은 문제로 인해 영향을 받습니다."기울어진 이쑤시개 증후군", 이는 올바르게 읽고 유지 관리하기가 어렵다는 것을 의미합니다.

대신 다른 표현식 구분 기호를 사용할 수 있습니다.

s#/some/path/here#/other/path/now#

~유효한 대체 표현식 구분 기호를 사용하는 또 다른 예입니다.

당신의 표정

s~ ~~g

동일합니까?

s/ //g

입력의 모든 공백을 제거합니다. 이 경우 /패턴이나 교체가 모두 포함되지 않으므로 다른 구분 기호를 사용할 필요가 전혀 없습니다 /.

동일한 작업을 수행하는 또 다른 방법은 다음과 같습니다.

tr -d ' ' <infile >outfile

답변2

이는 대체 구분 기호입니다. 가장 일반적으로 사용되는 구분 기호는 슬래시입니다 /. 그러나 sed어떤 문자든 구분 기호로 사용할 수 있습니다. 그러면 자동으로 다음 문자가 s구분 기호로 사용됩니다.

sed 's@ @@g'
sed 's+ ++g'
sed 's\ \\g'
sed 's* **g'

공백을 구분 기호로 사용할 수도 있습니다.

echo "foo" | sed 's foo bar g'

/가장 일반적으로 사용되는 다른 구분 기호는 구문의 명령에 슬래시가 많으면 혼동될 수 있습니다. 여러 공백을 단일 공백 ​​문자로 변환하려는 경우를 고려하십시오.

echo "    a   b  c  " | sed 's/\s\{1,\}/ /g'

넌 달릴 수 있어

echo "    a   b  c  " | sed 's~\s\{1,\}~ ~g'

이것이 더 명확합니다.

관련 정보