在BBEdit中帮助grep

时间:2009-09-22 00:13:32

标签: grep bbedit

我想在BBedit中点击以下内容。

查找

<dc:subject>Knowledge, Mashups, Politics, Reviews, Ratings, Ranking, Statistics</dc:subject>

替换为:

<dc:subject>Knowledge</dc:subject>
<dc:subject>Mashups</dc:subject>
<dc:subject>Politics</dc:subject>
<dc:subject>Reviews</dc:subject>
<dc:subject>Ratings</dc:subject>
<dc:subject>Ranking</dc:subject>
<dc:subject>Statistics</dc:subject>

OR

查找

<dc:subject>Social web, Email, Twitter</dc:subject>

替换为:

<dc:subject>Social web</dc:subject>
<dc:subject>Email</dc:subject>
<dc:subject>Twitter</dc:subject>

基本上,当有多个类别时,我需要找到逗号和空格,添加换行符并围绕类别打开/关闭。

有什么想法吗?

5 个答案:

答案 0 :(得分:4)

哇。这里有很多复杂的答案。怎么样找到:

, 

(逗号后面有空格)

并替换为:

</dc:subject>\r<dc:subject>

答案 1 :(得分:1)

查找

(.+?),\s?

替换:

\1\r

我不确定你的意思是“围绕类别打开/关闭”,但如果你的意思是你想把它包装在某种标签或链接中,只需将它添加到替换。

替换:

<a href="http://example.com/">\1</a>\r

会给你

<a href="http://example.com/">Social web</a>
<a href="http://example.com/">Email</a>
<a href="http://example.com/">Twitter</a>

或者使用替换获得更多的爱好者:

<a href="http://example.com/tag/\1/">\1</a>\r

会给你

<a href="http://example.com/tag/Social web/">Social web</a>
<a href="http://example.com/tag/Email/">Email</a>
<a href="http://example.com/tag/Twitter/">Twitter</a>

在最后一个示例中,您可能会遇到“社交网络”网址中存在空格的问题。我不建议这样做,但我想告诉你,你可以不止一次使用\ 1反向引用。

BBEdit手册中的Grep参考非常棒。转到帮助 - >用户手册,然后转到第8章。学习如何使用RegEx将改变您的生活。

<强>更新 很奇怪,当我第一次看到它时,它没有向我展示你的完整例子。基于我现在看到的你应该

查找

(.+?),\s?

替换:

<dc:subject>\1</dc:subject>\r

答案 2 :(得分:0)

我不使用BBEdit,但在Vim中你可以这样做:

%s /(_ [^&lt;] +)&lt; / dc:subject&gt; / \ =替代(submatch(0),“,[\ t] *”,“&lt; / dc:subject&gt; \ r“,”g“)/ g

它将处理多行和带有换行符的内容。它也处理具有多个行的行,但不会总是在close和start标记之间获取换行符。

如果您将此帖子发布到google群组vim_use并要求提供Vim解决方案及其相应的perl版本,您可能会得到一堆建议,这些建议可以在BBEdit中运行,然后也可以在perl中的任何编辑器之外。< / p>

答案 3 :(得分:0)

你可以使用sed来做到这一点,理论上你只需要用关闭和打开<dc:subject>替换“,”和中间的换行符,然后输出到一个新文件。 但是 sed似乎不喜欢html尖括号...我试图转义它们但是在它们被包含的任何时候仍然会收到错误消息。这是我到目前为止所有的时间,所以如果我有机会回到它,我会。也许其他人可以解决尖括号问题:

sed s/, /</dc:subject>\n<dc:subject>/g file.txt > G:\newfile.txt

好的,我想我明白了。基本上必须将包含尖括号的替换文本放在双引号中,并将分隔符sed使用更改为正斜杠以外的其他内容,因为这是在替换文本中而sed不喜欢它。我不太了解grep,但是读到grep只是匹配东西而sed会替换,所以这种类型的东西更好:

sed s%", "%"</dc:subject>\n<dc:subject>"%g file.txt > newfile.txt

答案 4 :(得分:0)

你不能通过普通的grep来做到这一点。但是你可以为BBEdit添加一个“Unix Filter”来为你完成这项工作:

#!/usr/bin/perl -w

while(<>) {
my $line = $_;
$line =~ /<dc:subject>(.+)<\/dc:subject>/;
my $content = $1;
my @arr;

if ($content =~ /,/) {
    @arr = split(/,/,$content);
}
my $newline = '';
foreach my $part (@arr) {
    $newline .= "\n" if ($newline ne '');
    $part =~ s/^\s*(\S*(?:\s+\S+)*)\s*$/$1/; 
    $newline .= "<dc:subject>$part</dc:subject>";
}
print $newline;
}

如何将此UNIX-Filter添加到BBEdit,您可以阅读“安装” - 此URL的一部分:http://blog.elitecoderz.net/windows-zeichen-fur-mac-konvertieren-und-umgekehrt-filter-fur-bbeditconverting-windows-characters-to-mac-and-vice-versa-filter-for-bbedit/2009/01/