是否可以在bash脚本中执行诸如使用lynx将网页内容作为浏览器进行操作 将它存储在一个变量中(实际上只有一个网页访问该页面),然后用很多grep来提取信息?
我尝试过这样的事情:
content="$(lynx -dump -nolist $url')"
var1=`cat "$content" | grep myre1`
var2=`cat "$content" | grep myre2`
但我在任务,使用引号,反引号等之间陷入困境。
如果有人有另一个没有lynx的解决方案:我正在搜索lynx --dump
这样的“浏览器呈现视图”(而不是wget
),最好避免在系统上创建文件(或者如果这是唯一的解决方案,我该如何继续删除这个临时文件?)
答案 0 :(得分:5)
修复你的代码。 我想回答这个问题
但我在任务,使用引号,反引号等之间陷入困境。
$()
而不是反引号,通常没有区别,但$()
的一大优势是可以嵌套它。另外在某些字体中,反引号可能看起来与单引号相似,如果将代码粘贴到某些网站,它可能会中断,因此$()更稳定。" "
放在参数周围。示例:echo "$myvar"
,wget "$myurl"
[[ ]]
代替[
。 [
是位于/ bin / test中的test
命令(和/ bin / [通常符号链接到/ bin / test),而[[ ]]
是bash语法。 (但似乎[现在是一个bash内置] let
进行数学运算,请使用(( ))
。示例:(( a = 5 * b ))
,echo $(( a / 20 ))
(( ))
进行数学比较而不是[[ ]]
,因为它允许直观的<=
<
>
>=
运算符。示例:if (( a <= b )); then ...
而不是if [[ $a -le $b ]]; then ...
tr
和其他实用程序。 Some of them和A bit more。示例:使用${myvar^^}
代替echo "$myvar" | tr a-z A-Z
cat filename | grep somestr
,而是使用grep somestr filename
。您的固定代码:
content=$(lynx -dump -nolist "$url")
var1=$(grep myre1 <<< "$content")
var2=$(grep myre2 <<< "$content")