テキストファイル(著作権)の内容は次のとおりです。
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
上記で@
置換を除数として使用したので、/
最初の除数をエスケープする必要はありません/
。