このsedコマンドは何をしますか?どのように変更できますか?

このsedコマンドは何をしますか?どのように変更できますか?

このコマンドの機能を理解していません。

 grep '<span id="geodata" class="geo">[-0-9.]*; [-0-9.]*</span>' -R articles/ --only-matching | sed 's@articles//@@' | sed 's@:<span id=.geodata. class=.geo.>@ @' | sed 's@; @ @' | sed 's@</span>@@' | sort -u -b -k1 > geocodes_from_html.txt

いくつかの背景知識:私はWikiの記事を書いており、その記事でいっぱいのフォルダ(「記事」)を持っています。処理スクリプトは数年前に書かれており、当時の場所に関する地理情報は一般的に次のようになりました。

   <span id="geodata" class="geo">[-0-9.]*; [-0-9.]*</span>

これで、次のようになります。

  <abbr class="latitude">[-0-9.]*</abbr><abbr class="longitude">[-0-9.]*</abbr>

このコマンドが機能するにはどうすればよいですか?

答え1

提供されたコマンドは、ディレクトリ内のすべてのファイルからgrepこの文字列を検索します。次のコマンドは、複数の文字列を置き換えます。<span [...]</span>articlessed

たとえばsed s@articles/@@スラッシュ/のみ)以下のように読み取ることができます。sed search@this_string@replace_with_this@;文字列はarticles/何でも置き換えられます。あるスクリプトから次のスクリプトに渡すのではなく、すべてのスクリプトを1つのスクリプトにまとめて同じ結果を得ることができますsed

座標を抽出するために他のコマンドを使用したくない場合は、次のようにします。

grep '<abbr class="latitude">[-0-9.]*</abbr><abbr class="longitude">[-0-9.]*</abbr>' -R articles --only-matching | sed 's@articles/@@;s@:<abbr class="latitude">@ @;s@<abbr class="longitude">@ @;s@</abbr>@@g' | sort -u -b -k1 >geocodes_from_html.txt

関連情報