sed를 사용하여 특수 문자를 삽입하는 솔루션

sed를 사용하여 특수 문자를 삽입하는 솔루션

&tex 파일에서 by를 대체하기 위해 sed를 사용하려고 합니다 . \&을 사용하고 있습니다 sed -i "s/ & / \\\& /g" bibfile.bib; . 그러나 파일의 결과가 예상한 것과 \ &다릅니다 . \&어떤 도움이라도 환영합니다, 마크

답변1

Bourne과 같은 셸에서 큰따옴표를 사용한다는 것은 줄 연속으로 \큰따옴표 안에 escape `, "및 자체를 사용하는 것과 마찬가지로 백슬래시를 위한 추가 이스케이프 레이어가 필요하다는 것을 의미합니다 .$

대신 작은따옴표를 사용하세요.

'...'참조 연산자로서의 쉘 지원 도 일부 지원보다 낫습니다 "...".

그래서:

sed -i 's/ & / \\\& /g' bibfile.bib

sedsed, -is/ & / \\\& /g4개의 별도 인수로 호출 됩니다 bibfile.bib.

큰따옴표를 사용하여 동일한 매개변수를 전송하려면 최소한 다음이 필요합니다.

sed -i "s/ & / \\\\\&" bibfile.bib

처음 두 쌍은 \하나가 되어 \그대로 \&유지됩니다 \&.

sed -i "s/ & / \\\\\\&" bibfile.bib

sedIMO도 작동하며 3개의 백슬래시를 큰따옴표 안에 삽입하여 전달하려는 것이 더 깔끔하고 명확합니다 \\.

다음과 같이 할 수도 있습니다.

sed -i 's/ \(& \)/ \\\1/g' bibfile.bib

또는:

sed -Ei 's/ (& )/ \\\1/g' bibfile.bib

당신의:

sed -i 's/ & / \\\& /g' bibfile.bib

실제로 sed, -is/ & / \\& /gbibfile.bib인수로 전달하면 접두사와 접미사로 해석됩니다 sed." & "" \"" "


완전성을 위해 다른 쉘에서는 다음을 수행합니다.

csh/tcsh

csh/tcsh에는 \nor에 대한 특별한 내용이 없습니다(역사적 확장을 위해 이스케이프하는 것 외에는).'...'"..."!

그래서 거기에서 일할 것입니다 sed -i "s/ & / \\\& /g" bibfile.bib.sed -i 's/ & / \\\& /g' bibfile.bib

물고기

물고기의 경우 \내부도 특별하므로 '...'다음이 필요합니다.

sed -i "s/ & / \\\\\\& /g" bibfile.bib

또는

sed -i 's/ & / \\\\\\& /g' bibfile.bib

일반적으로 이스케이프해야 하는 문자 수가 적기 때문에 후자가 여전히 선호됩니다.

RC

rc에는 참조 형식이 하나만 있습니다: ( '...'not "...", \nornornor )$'...'$"..."

sed -i 's/ & / \\\& /g' bibfile.bib

거기에만.

바라보다Unix 쉘에서 일반 문자와 같은 특수 문자를 사용하는 방법은 무엇입니까?어떤 문자가 특별한지, 다양한 셸에서 해당 문자를 이스케이프/인용하는 방법에 대한 자세한 내용입니다.


의 경우 해당 명령의 대체 부분에서 은 sed내용과 일치하도록 확장되는 특별한 의미가 아니라 백슬래시 및 리터럴로 해석됩니다.s/pattern/replacement/flags\\\&&

관련 정보