LaTeX 문서를 편집 중인데 '\parallel'의 모든 인스턴스를 'something' \parallel something \parallel
으로 변경해야 할 \norm{something}
때가 있습니다. '\parallel'과 'something' 사이에 공백이 없습니다. 나는 사용하려고
$ sed -i 's/\\parallel[.*]\\parallel/\\norm\{\1\}/g' a.txt $
그러나 "잘못된 참조" 오류가 반환됩니다. 올바른 코드는 무엇입니까 sed
?
답변1
이 작업을 수행할 때:
$ sed -i 's/\\parallel[.*]\\parallel/\\norm\{\1\}/g' a.txt
, 캡처 그룹을 사용하고 있지 않습니다.
[]
지정한 문자 클래스에서. 문자 클래스는 그 중 하나로 대체될 수 있는 여러 기호입니다. 따라서 RE는 [.*]
"문자열"이 아닌 정확히 일치하는 것과 같습니다 ..
*
캡처 그룹은 로 표시됩니다 \(RE\)
. 따라서 아래와 같이 []
로 바꿔야 합니다 .\(\)
$ sed -i 's/\\parallel\(.*\)\\parallel/\\norm{\1}/g' a.txt
을 통해 액세스할 수 있습니다 \1
.
답변2
sed -i -e 's/\\parallel\s\+\(.*\S\)\s*\\parallel/\\norm {\1}/g' a.txt
\1
대체 문자열의 내용은 검색 패턴의 첫 번째 \(
... 를 참조합니다.\)
"확장된" 정규식 구문을 선호하는 경우
sed -i -r -e 's/\\parallel\s+(.*\S)\s*\\parallel/\\norm \{\1\}/g' a.txt
답변3
바꾸다:
$ sed -i 's/\\parallel[.*]\\parallel/\\norm\{\1\}/g' a.txt $
이것으로:
$ sed -i 's/\\parallel\(.*\)\\parallel/\\norm\{\1\}/g' a.txt
그게 효과가 있을 거야
답변4
저는 무엇을 몰랐는지 몰라서 [:alnum:]을 사용했습니다.
sed -r 's#\\parallel[ ]*([[:alnum:]]+)[ ]*\\parallel#\\norm{\1}#g'