道歉,如果下面是凌乱或有更清洁的方式,我还在学习!
我正在使用CURL来抓取一个带有数字/ HTML的页面,以使用下面的命令使用数字到达表格
echo $curlo | awk '/<th>00/ { match($0, /<th>00/); print substr($0, RSTART - 10, RLENGTH + 40000); }' | sed 's/d1ffce/\'$'\n/g'| sed 's/88ff7f/\'$'\n/g' | grep -o '[0-9]*'
要在th00处开始输出,请打印下一个40000个字符(页面大小不一样但不会那么高),替换一些十六进制颜色代码,然后打印出所有数字
然而,th00会随着时间的推移变为th01,02等,所以我正在尝试使用变量。为了测试,我设置cnt = 00并在命令中用变量
替换它echo $curlo | awk '"/<th>$cnt/" { match($0, "/<th>$cnt/"); print substr($0, RSTART - 10, RLENGTH + 40000); }' | sed 's/d1ffce/\'$'\n/g'| sed 's/88ff7f/\'$'\n/g' | grep -o '[0-9]*'
但输出完全不同。如果我回复$ cnt它打印00罚款。我也尝试将整个th00放在cnt变量和同样的问题中。
为了比较当我使用第一个命令时,我得到382行,当我使用第二个命令时,我得到896
这是使用bash shell btw
答案 0 :(得分:0)
Shell变量不会在单引号内展开。但最好使用-v
选项分配awk变量:
echo "$curlo" | awk -v cnt=$cnt 'match($0, "<th>" cnt "") {
str = substr($0, RSTART-10, RLENGTH+40000);
gsub("d1ffce|88ff7f", "$\n", str);
gsub(/^[^0-9]+|[^0-9]+$/, "", str);
gsub(/[^0-9]+/, "\n", str);
print str; }'
也无需输入sed
和grep -o
,因为awk
可以使用gsub()
执行相同操作。