如何用空格替换文本文件中的特定字符串

如何用空格替换文本文件中的特定字符串

文本文件(版权)的内容如下。

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

在上面,正则表达式\/匹配以/(因为/被用作sed分隔符,我们将其转义为\/)开头的任何内容,后跟[^/]*匹配零个或多个除 之外的任何字符/,后跟被转义的.tar.gz位置.,以便它们仅匹配句点。 (在正常的正则表达式表示法中,.匹配任何一个字符。)

glob(由 shell 使用)和正则表达式(由 sed、grep 和其他重要工具使用)之间存在许多差异。在 glob 中,.表示句点。在正则表达式中,.是一个通配符,表示任何单个字符。在 glob 中,*表示零个或多个任意字符。在正则表达式中,*意味着零个或多个前一件事的

进阶话题

我们不必/在 sed 替代命令中用作分隔符。其他分隔符也是可能的,例如@

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

因为在上面,我们使用@代替 来作为除数/,所以我们不需要转义第一个/

相关内容