Bash,perl正则表达式的帮助

时间:2011-04-14 19:53:01

标签: regex perl bash

我有一个文本文件(utf8):

http://d.pr/1d6T+

请帮我正则表达式。我想替换

<p>
TERRANO...
</p>

with:空格。 :)

<td width="20%" align="left" class="thead">Rám:</td>

使用:

<td width="20%" align="left" class="thead">Something else:</td>

单词“Rám”也可以替换。

我发现了这一行,但我不知道如何使用它:

find . -type f -exec perl -p -i -e "s/SEARCH_REGEX/REPLACEMENT/g" {} \;

4 个答案:

答案 0 :(得分:3)

假设您要替换HTML文件中的文本:

cd /path/to/my/project
find . -iname '*.html' -exec perl -p -i -e "s/Rám:/Something else:/g" {} \;
find . -iname '*.html' -exec perl -p -i -e "s/TERRANO.../Something else:/g" {} \;

答案 1 :(得分:3)

如果您不介意将常规.txt文件转换为。(x)html文件,并且HTML tidy和xmlstarlet可用,则可以不使用正则表达式!

tidy -v                   # HTML Tidy for Mac OS X released on 25 March 2009
xmlstarlet --version      # 1.0.6

curl -L -o utf8file 'http://d.pr/1d6T+'

# convert HTML to XHTML with tidy
tidy -h
tidy -i -q -c -wrap 0 -numeric -asxml -utf8 --merge-divs yes --merge-spans yes utf8file > utf8file.xhtml

xmlstarlet el -a utf8file.xhtml
xmlstarlet el -v utf8file.xhtml
xmlstarlet edit --help

# edit file in-place
xmlstarlet edit -L -u "//*[local-name()='p']" -v 'EMPTY SPACE IS HERE' utf8file.xhtml 

# remove <p> ... </p> completely
xmlstarlet edit -L -d "//*[local-name()='p']" utf8file.xhtml  

xmlstarlet edit -L -u "//*[local-name()='td'][@width='20%' and @align='left' and @class='thead' and .='Rám:']" -v 'SOMETHING ELSE:' utf8file.xhtml

open -a Safari utf8file.xhtml

# convert XHTML to HTML with tidy
tidy -i -q -c -wrap 0 -numeric -ashtml -utf8 --merge-divs yes --merge-spans yes utf8file.xhtml > utf8file.html
open -a Safari utf8file.html

答案 2 :(得分:0)

要在就地编辑步骤之后从utf8file.xhtml中提取表,您可以使用xmlstarlet的“XPATH表达式的打印副本”功能:

xmlstarlet sel --help

# test
xmlstarlet sel -I -t -c "//*[local-name()='table'][@id='model-table-specifikacia']" utf8file.xhtml

xmlstarlet sel -I -t -c "//*[local-name()='table'][@id='model-table-specifikacia']" utf8file.xhtml > utf8file

答案 3 :(得分:0)

旧主题,但很有用:对于大规模搜索和替换,我倾向于使用Perl peewee(基于所使用的参数的名称),而不是依赖于find然后执行perl代码。

也就是说,我使用以下内容:

perl -pi -w -e 's/<p>\nTERRANO.+?\n<\/p>/<p>\n\n<\/p>/g;' ./*.html

perl -pi -w -e 's/<td (.+?) class=\"thead\">Rám:<\/td>/<td $1 class="thead">Something else:<\/td>/g;' ./*.html

希望能帮助别人!