对目录中的文件执行正则表达式操作

时间:2011-03-14 04:19:43

标签: regex perl bash unix scripting

我想用<span class='i'> </span>替换<i> </i>的实例,因为我决定以这种方式格式化我的网页。所以我提出了这个命令:

perl -pe "s/<span +class *= *['\"]i['\"] *>(.*?)<\/span>/<i>\1<\/i>/g"

我可以让它更精细,但我真的不认为有像< / span>这样奇怪形成的标签或其他任何东西,所以我会留下它。它确实有一个非贪婪的捕获,这就是我使用perl -p而不是sed的原因。

因此,这将输出正确修改的行,但我不确定通过此命令发送多个文件的最佳方法。如果我希望所有pages/*.html都修复span class='i'标记,那么最好的方法是什么?除了for循环之外,bash是否为这样做提供了一些条款?

2 个答案:

答案 0 :(得分:2)

以下内容将遍历pages/中的所有html文件,并使用perl脚本进行就地编辑。

#!/bin/bash

for file in pages/*.html; do
  perl -pi -e "s/<span +class *= *['\"]i['\"] *>(.*?)<\/span>/<i>\1<\/i>/g" "$file"
done

答案 1 :(得分:2)

@Steven,根据您对@SiegeX的回答,以下内容可以正常使用:

perl -pi -e "s/<span +class *= *['\"]i['\"] *>(.*?)<\/span>/<i>\1<\/i>/g" *.html

我会让Perl创建文件备份,因此将第一部分更改为

perl -pi.bak -e ...