我想在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>
基本上,当有多个类别时,我需要找到逗号和空格,添加换行符并围绕类别打开/关闭。
有什么想法吗?
答案 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/