次の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