テキストファイルの特定の文字列を空白に置き換える方法

テキストファイルの特定の文字列を空白に置き換える方法

テキストファイル(著作権)の内容は次のとおりです。

gems/1.8/gems/fxri-0.3.6/fxri-0.3.6.tar.gz/fxri-0.3.6.tar/lib/Icon_Loader.rb
misc/common/groovy/groovy-src-1.7.0.tar.gz/groovy-1.7.0.tar/src/examples/swing/RegexCoach.groovy

...このようなより多くのファイルパス

tar.gzで終わるファイル名を空白に変更したいと思います。期待される:

gems/1.8/gems/fxri-0.3.6/fxri-0.3.6.tar/lib/Icon_Loader.rb
misc/common/groovy/groovy-1.7.0.tar/src/examples/swing/RegexCoach.groovy

これはうまくいきません:

sed -i -e 's/*.tar.gz//g' copyright

助けが必要です。

ベストアンサー1

として全体的な状況、、*.tar.gzで終わるすべての文字列を表します.tar.gz。しかし、Sedはいいえ使用、それを使用一般的な表現正規表現と構文が異なります。努力する:

sed -i -e 's/\/[^/]*\.tar\.gz//g' copyright

上記の正規表現は、(区切り文字として使用されるためエスケープされます)で始まるすべての項目と一致し、\/その後にはを除くすべての項目に一致する0個以上の文字が続き、その後にはエスケープされた位置が続きます。したがって、ピリオドのみが一致します。 。 (通常の正規表現表記では、任意の1文字と一致します。)//sed\/[^/]*/.tar.gz..

glob(シェルで使用)と正規表現(sed、grep、およびその他の重要なツールで使用)の間には多くの違いがあります。 glob では.ピリオドを表します。正規表現で.単一文字を表すワイルドカード文字。 glob は*0 個以上の任意文字を表します。正規表現では*0 個以上を意味します。前のイベントの

高度なトピック

/sed 代替コマンドで区切り文字として使用する必要はありません。他の区切り記号も可能です@。たとえば、次のようになります。

sed -i -e 's@/[^/]*\.tar\.gz@@g' copyright

上記で@置換を除数として使用したので、/最初の除数をエスケープする必要はありません/

おすすめ記事