2

考虑以下带有简单正则表达式的 bash 脚本:

for f in "$FILES"
do
  echo $f
  sed -i '/HTTP|RT/d' $f
done

该脚本将读取由 指定的目录中的每个文件FILES并删除出现'http'或的行'RT'但是,正则表达式的 OR 部分似乎不起作用。也就是说,如果我只有sed -i '/HTTP/d' $f那么它将删除所有包含HTTP但我不能让它同时删除HTTPRT

  1. 我必须在我的正则表达式中更改什么,以便删除带有HTTP或的行?RT

提前致谢!

4

3 回答 3

2

两种方法(至少):

  1. sed 了解您的正则表达式:

    sed -E -i '/HTTP|RT/d' $f

  2. 分别指定每个令牌:

    sed -i '/HTTP/d;/RT/d' $f

于 2013-11-13T02:44:18.843 回答
1

在你做任何事情之前,用相反的方式运行,并打印你打算删除的内容:

sed -n -e '/HTTP/p' -e '/RT/p' $f

只是为了确保在实际更改文件之前只删除要删除的内容。

“这不是你是否偏执的问题,而是你是否足够偏执的问题。”

于 2013-11-13T02:51:08.783 回答
0

好吧,首先,它将处理 FILES 变量中的所有 WORDS。

如果您希望它执行 FILES 目录中的所有文件,那么您需要这样的东西:

for f in $( find $FILES -maxdepth 1 -type f )
do
   echo $f
    sed -i -e '/HTTP/d' -e '/RT/d' $f
done

sed 只需要两个“-e”选项。

于 2013-11-13T02:46:17.607 回答