2

次のように文が終わるファイルがたくさんあります\@.Next sentence。ピリオドの後にスペースを挿入したいのですが。

ただし、すべてのオカレンスに\@.スペースがないわけではないため、正規表現では、ピリオドの後の次の文字が大文字であるかどうかを確認します。

ピリオドの後に1つの文字をチェックしているので、に置き換えることができません\@.\@.また、ピリオドの後にどの文字が続くのかわからないため、行き詰まります。

現在の私のコマンド:

sed -i .bak -E 's/\\@\.[A-Z]/<SOMETHING IN HERE>/g' *.tex

一致する文字列の最後の文字を取得して、置換正規表現で使用するにはどうすればよいですか?

編集:記録のために、私はBSDバージョンを使用していsedます(私はOS Xを使用しています)-以前の質問からsed、どうやらBSD sed(または少なくともAppleバージョン)はGNUsedで常にうまく機能するとは限りません正規表現。

4

4 に答える 4

3

正しいコマンドは次のようになります。

sed -i.bak -E "s/\\\@.(\S)/\\\@. \1/g" *.tex

その間、任意の\@後に続く非空白( )に一致し、空白を挿入します(一致全体を、見つかったばかりの非空白に加えて\S置き換えることによって作成されます)。'\@ '

于 2012-05-09T21:51:45.307 に答える
1

次のsedコマンドを使用します。

sed -i.bak -E 's/(\\@\.)([A-Z])/\1 \2/g' *.tex

またはそれ以上:

sed -i.bak -E 's/(\\@\.)([^ \t])/\1 \2/g' *.tex

(大文字だけでなく)空白文字が後に続かない\@.場合は、スペースが挿入されます。

于 2012-05-09T22:14:36.507 に答える
0

私は次のことが正しいと思います:

s/\\@\.[^\s]/\\@. /g

式の後にスペースがない場合にのみ、式を置き換えてください。

于 2012-05-09T21:43:20.990 に答える
0

これはあなたのために働くかもしれません:

sed -i .bak -E 's/\\@\. \?/\\@. /g' *.tex

説明:

スペースがある場合はスペースに置き換え、そうでない場合はスペースを挿入します。

于 2012-05-10T00:07:32.910 に答える