1

BBedit で以下を grep したいと思います。

探す:

<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>

また

探す:

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

と置換する:

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

基本的に、カテゴリが複数ある場合は、コンマとスペースを見つけて、改行を追加し、カテゴリの開始/終了をラップする必要があります。

何かご意見は?

4

5 に答える 5

4

わお。ここにはたくさんの複雑な答えがあります。見つけてみませんか:

, 

(カンマの後にスペースがあります)

次のように置き換えます。

</dc:subject>\r<dc:subject>
于 2011-05-12T17:25:36.057 に答える
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>

または、Replace を使用してより洗練されたものにします。

<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>

最後の例では、「ソーシャル Web」の URL にスペースが含まれていることに問題がある可能性があります。お勧めしませんが、\1 後方参照を複数回使用できることを示したかったのです。

BBEdit マニュアルの Grep リファレンスはすばらしいものです。Help->User Manual に進み、Chapter 8 に進みます。RegEx をうまく使う方法を学ぶと、あなたの人生が変わります。

更新 奇妙なことに、これを最初に見たとき、完全な例は表示されませんでした。私が今見ているものに基づいて、あなたはすべきです

探す:

(.+?),\s?

交換:

<dc:subject>\1</dc:subject>\r
于 2009-09-22T00:34:30.073 に答える
0

私は BBEdit を使用しませんが、Vim では次のことができます。

%s/(_[^<]+)</dc:subject>/\=substitute(submatch(0), ",[ \t]*", "</dc:subject>\r", "g" )/g

改行でコンテンツにまたがる複数の行とタグを処理します。複数の行も処理しますが、常に終了タグと開始タグの間に改行が入るとは限りません。

これを google グループ vim_use に投稿して、Vim ソリューションとそれに対応する perl バージョンを求めると、おそらく多くの提案と、BBEdit で機能するものと、perl のエディター外でも機能するものを得るでしょう。

ドン

于 2009-09-22T18:14:15.347 に答える
0

これは、通常の grep では実行できません。しかし、BBEdit に「Unix フィルター」を追加して、この作業を行うことができます。

#!/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 フィルターを 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/

于 2010-07-08T08:00:30.463 に答える
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
于 2009-09-22T19:05:13.557 に答える