我不明白这个命令的作用:
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
一些背景:我正在处理维基文章,我有一个充满它们的文件夹(“文章”)。处理脚本是几年前编写的,当时某个地方的地理信息通常是这样的:
<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>
articles
sed
例如sed s@articles/@@
(与一个斜杠 /仅)可以读作:sed search@this_string@replace_with_this@
;该字符串articles/
将被替换为任何内容。您可以将所有脚本合并到一个具有相同结果的脚本中,而不是从一个脚本传递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