
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
、キャプチャグループを使用していません。
[]
指定した文字クラスから。文字クラスは、それらの1つに置き換えることができるいくつかの記号です。したがって、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'