3

是否有可能在 bash 脚本中执行诸如使用 lynx 将网页内容作为浏览器获取的操作将其存储在一个变量中(实际上只有一个网络访问该页面),然后执行许多 grep 来提取信息?

我试过这样的事情:

content="$(lynx -dump -nolist $url')"
var1=`cat "$content" | grep myre1`
var2=`cat "$content" | grep myre2`

但我在分配之间搞砸了,使用引号、反引号等。

如果有人有另一个没有 lynx 的解决方案:我正在寻找类似lynx --dump“浏览器渲染视图”(而不是wget)的东西,并且最好避免在系统上创建文件(或者如果这是唯一的解决方案,我该如何继续删除它临时文件?)

谢谢你和最好的问候

4

1 回答 1

5

刚刚修复了你的代码。我想回答这个问题

但我在分配之间搞砸了,使用引号、反引号等。

  • 请更喜欢$()而不是反引号,通常没有区别,但一个很大的优点$()是你可以嵌套它。此外,在某些字体中,反引号可能看起来类似于单引号,如果您将代码粘贴到某些站点,它可能会中断,因此 $() 更稳定。
  • 始终放置" "在参数周围。例子:echo "$myvar",wget "$myurl"
  • 使用[[ ]]而不是[. [test位于 /bin/test 中的命令(并且 /bin/[ 通常符号链接到 /bin/test),[[ ]]而是 bash 语法。(但是现在看起来 [ 是内置的 bash )
  • 不要let用于数学运算,请使用(( )). 例子:(( a = 5 * b )),echo $(( a / 20 ))
  • 用于(( ))数学比较而不是[[ ]]因为它允许直观的<= < > >=运算符。示例:if (( a <= b )); then ...代替if [[ $a -le $b ]]; then ...
  • 更喜欢 bash 字符串操作而不是tr其他实用程序。其中一些更多。示例:使用${myvar^^}代替echo "$myvar" | tr a-z A-Z
  • 大多数命令允许您指定文件名。例如,不要使用cat filename | grep somestrgrep somestr filename而是使用。

您的固定代码:

content=$(lynx -dump -nolist "$url")
var1=$(grep myre1 <<< "$content")
var2=$(grep myre2 <<< "$content")
于 2013-08-21T09:36:15.367 回答