我正在尝试掌握 grep。我从某人为从某个网站获取天气信息而编写的 GeekLet 脚本中获取了以下命令:
curl -s 'http://thefuckingweather.com/?zipcode=61820' | grep '"content\|"remark\|span' || sed 's/<[^>]*>//g' | sed 's/]*>//g' | sed 's/°/°/'
我现在不担心 sed 命令。我知道它可以清除输出,使其格式整齐,但现在我只是想弄清楚 grep 命令。
我有几个问题,那里的所有指南/手册似乎都没有明确的答案:
- 这里的反斜杠 (
\
) 起什么作用? - 中间的管道符“|”起什么作用?
- 为什么“content\|”用双引号引起来?
另外,您知道其他任何涉及使用 grep 解析 html 内容的想法/指南吗?
答案1
这里的反斜杠 (
\
) 起什么作用?grep
使用“逃脱“管道(|
)表示逻辑或。换句话说,grep 'foo\|bar'
表示打印包含任何一个“foo”或者“酒吧”。中间的管道符“|”起什么作用?
参见问题 1 的答案。
为什么“content\|”用双引号引起来?
不是。引号是被搜索模式的一部分,
curl
你给出的命令的输出包含以下几行:</title><meta http-equiv="Content-Language" content="en-us" /> [...] <div class="content">
单词“content”之前的引号(不是引号,第二个引号
"
属于下一个模式,"remark
)用于使 grep 仅打印上面的第二行。它是实际搜索模式的一部分:"content
。