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'
이것이 더 명확합니다.