2012-05-09 14 views
2

文章が次のように終わるファイルがたくさんあります:\@.Next sentence。私は期間の後にスペースを挿入したいと思います。sedを使ってピリオドを挿入した後にスペースを挿入

\@.のすべてのオカレンスにはスペースが含まれていませんが、私の正規表現はピリオドの次の文字が大文字であるかどうかを確認します。

期間の後に1文字をチェックしているので、\@.から\@.への置換はできません。期間の後にどんな文字があるのか​​わからないので、私は立ち往生しています。

現在

マイコマンド:

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

どのように交換用の正規表現で使用するために一致する文字列の最後の文字をつかむことができますか?

EDIT:sed(私はOS Xを使用しています)のBSDバージョンを使用しています - 私のprevious question regarding sedから、明らかにBSD sed(または少なくともAppleバージョン) GNU sed正規表現で。

答えて

3

右のコマンドはこのようになります。それWhith

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

、あなたは非空白文字(\S)に続いて任意の\@にマッチし、空白文字を挿入('\@ 'プラスとマッチ全体を交換することによってなされるもの見つからなかった空白が見つかりました)。 \@.任意の空白文字(だけでなく、大文字の文字)が続かない場合はスペースを挿入します

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

+0

これは動作していないようです: 'echo '\ @。N | \ @。 Q '| sed -E 's/\\\ @。(\ S)/ \\\ @。 \ 1/g ''は' \ @。N | \ @を返します。 Q '(' \ @。N | \ @。Q';スペースは挿入されません)。 – simont

+0

奇妙なのは、私が望む結果を得るからです。私はsedを実行しています。4.2.1。あなたのバージョンは? –

+0

'gsed'を使うと正しいと思います。それは動作します。ありがとうございました – simont

0

私は以下のが正しいことだと思う。それは空白が続いていない場合

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

のみ表現を交換してください。

+0

これは動作していません: 'echo '\ @。N | \ @。 Q '| sed -E 's/\ @。[^ \ s]/\ @。/g''は私に '\ @を与えます。 | \ @。 Q'(Nを噛んだ)。 – simont

1

使用このsedコマンド:

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

以上。

0

これはあなたのために働くかもしれない:

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

説明:

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

関連する問題