다음 sed 코드를 작성했지만 작동하게 하는 방법을 찾지 못했습니다...
sed -is 's/documentclass\{standalone\}/documentclass\[class\=memoir\]\{standalone\}/gp' *.tex
내가 잘못된 방식으로 이스케이프 시퀀스를 사용하고 있습니까? 다음은 반환된 오류입니다.
sed: -e expression #1, char 76: Invalid content of \{\}
답변1
BRE(기본 정규 표현식) 모드(예: -E
또는 -r
명령줄 옵션 없음)에서는 중괄호가 특수하지 않고 이스케이프된 중괄호가 수량자에 사용됩니다. 예를 들어 \{1,3\}
오류 메시지 standalone
는 숫자 수량자로 구문 분석할 수 없기 때문입니다. 그래서 당신은 다음을 원합니다 {standalone}
:
$ printf '%s\n' 'documentclass{standalone}' | sed 's/documentclass{standalone}/documentclass[class=memoir]{standalone}/gp'
documentclass[class=memoir]{standalone}
documentclass[class=memoir]{standalone}
또는 이스케이프된 중괄호를 유지하되 ERE(확장 정규 표현식) 모드를 사용하세요.
$ printf '%s\n' 'documentclass{standalone}' | sed -r 's/documentclass\{standalone\}/documentclass[class=memoir]{standalone}/gp'
documentclass[class=memoir]{standalone}
documentclass[class=memoir]{standalone}
두 경우 모두 RHS에서 이스케이프할 필요가 있는 항목은 없습니다.
또한보십시오:
또한 적어도 GNU sed에서는 -is
파일이 그 자리에서 편집되어 접미사가 붙은 백업 파일이 생성된다는 점에 유의하세요 s
. -i
및 옵션을 전달하려면 -s
별도로 또는 다른 순서로 수행해야 합니다 -si
. 그러나 iirc 는 후자가 아마도 중복될 수 있음을 -i
의미합니다 .-s