在shell中使用lynx,存储转储以获得更多grep

use*_*802 3 bash lynx

是否有可能在bash脚本中做一些事情,比如将网页内容作为浏览器使用lynx将其存储在一个变量中(实际上只有一个网络访问页面),然后做很多grep来提取信息?

我尝试过这样的事情:

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

但我在任务,使用引号,反引号等之间陷入混乱.

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

谢谢你和最诚挚的问候

Ale*_*-A. 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 somestr,请grep somestr filename改用.

你的固定代码:

content=$(lynx -dump -nolist "$url")
var1=$(grep myre1 <<< "$content")
var2=$(grep myre2 <<< "$content")
Run Code Online (Sandbox Code Playgroud)

  • 请不要**使用`[[$ a == $ b]]`除非你的意思是'$ b`被解释为glob模式而不是文字字符串.你可以使用`[[$ a =="$ b"]]`,但实际上我认为`[["$ a"=="$ b"]]`因为它绝对没有错( "$ a"周围的引号没有任何好处,但它们也没有任何伤害),并且因为你认为双引号扩展是默认值是最安全的 - 你应该做的事情,除非有正面的理由不要.这样你就不必跟踪真正需要它们的所有奇怪情况(如`$ b`). (2认同)
  • @ Aleks-DanielJakimenko:试试'a ='不是星号'; B = '*'; [[$ a == $ b]] && echo yes || echo no` - 也打印'yes`,因为`$ b`中的`*`将匹配任何字符串. (2认同)