1

sed を使用して、テキスト ファイル内の特定のピリオドを置き換えようとしています。私のファイルは次のようなものです:

a.b
aa.bb
aa. b
a . b

私がやろうとしているのは、直前と直後に文字があるピリオドを「§」に置き換えることです。この場合、「ab」と「aa.bb」です。私はgrepとsedでそれを行うことができました:

egrep '[[:alpha:]]\.[[:alpha:]]' | sed 's/\./§/g'

しかし、それではファイルを操作し続けることはできません。そして、私が試してみると

sed 's/[[:alpha:]]\.[[:alpha:]]/§/g'

「ab」のような文字列を「a§b」ではなく「§」に置き換えます。

助けていただければ幸いです。

4

2 に答える 2

3

パーツを「キャッチ」してから、再度印刷する必要があります。

sed 's/\([[:alpha:]]\)\.\([[:alpha:]]\)/\1§\2/g'

形式\([[:alpha:]]\)\.\([[:alpha:]]\)は を示しますXXX.YYY。次に、最初の部分、2番目の部分である...の間に\1§\2それらを印刷します。\1\2\( ... \)

さらに詳しい情報が必要な場合は、次のリファレンスが役立ちます: RegExp - パターンの一部を sed に保持する

于 2013-04-22T12:49:23.657 に答える
0

どういうわけかsed私は好きではありませんが、これは と同じですperl

perl -pe 's/(\w)\.(\w)/$1§$2/g'

あなたが探している正規表現機能は「キャプチャ」と呼ばれます。

更新: 何らかの理由-Eで が必要でしたsed:

sed -E 's/([[:alpha:]])\.([[:alpha:]])/\1§\2/g'
于 2013-04-22T12:51:58.087 に答える