&
tex 파일에서 by를 대체하기 위해 sed를 사용하려고 합니다 . \&
을 사용하고 있습니다 sed -i "s/ & / \\\& /g" bibfile.bib;
. 그러나 파일의 결과가 예상한 것과 \ &
다릅니다 . \&
어떤 도움이라도 환영합니다, 마크
답변1
Bourne과 같은 셸에서 큰따옴표를 사용한다는 것은 줄 연속으로 \
큰따옴표 안에 escape `
, "
및 자체를 사용하는 것과 마찬가지로 백슬래시를 위한 추가 이스케이프 레이어가 필요하다는 것을 의미합니다 .$
대신 작은따옴표를 사용하세요.
'...'
참조 연산자로서의 쉘 지원 도 일부 지원보다 낫습니다 "..."
.
그래서:
sed -i 's/ & / \\\& /g' bibfile.bib
sed
sed
, -i
및 s/ & / \\\& /g
4개의 별도 인수로 호출 됩니다 bibfile.bib
.
큰따옴표를 사용하여 동일한 매개변수를 전송하려면 최소한 다음이 필요합니다.
sed -i "s/ & / \\\\\&" bibfile.bib
처음 두 쌍은 \
하나가 되어 \
그대로 \&
유지됩니다 \&
.
sed -i "s/ & / \\\\\\&" bibfile.bib
sed
IMO도 작동하며 3개의 백슬래시를 큰따옴표 안에 삽입하여 전달하려는 것이 더 깔끔하고 명확합니다 \\
.
다음과 같이 할 수도 있습니다.
sed -i 's/ \(& \)/ \\\1/g' bibfile.bib
또는:
sed -Ei 's/ (& )/ \\\1/g' bibfile.bib
당신의:
sed -i 's/ & / \\\& /g' bibfile.bib
실제로 sed
, -i
및 s/ & / \\& /g
를 bibfile.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
\\
\&
&