简体   繁体   中英

grepping the output of a curl command within bash script

I am currently attempting to make a script that when i enter the name of a vulnerability it will return to me the CVSS3 scores from tenable.

So far my plan is:

  1. Curl the page
  2. Grep the content i want
  3. output the grepped CVSS3 score

when running myscript however grep is throwing the following error:

~/Documents/Tools/Scripts ❯ ./CVSS3-Grabber.sh                             
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                Dload  Upload   Total   Spent    Left  Speed
  100 30964    0 30964    0     0  28355      0 --:--:--  0:00:01 --:--:-- 28355
  grep: unrecognized option '-->Nessus<!--'
  Usage: grep [OPTION]... PATTERNS [FILE]...
  Try 'grep --help' for more information.

This has me very confused as when i run this in the command line i curl the content to sample.txt and then using the exact same grep syntax:

grep $pagetext -e CVSS:3.0/E:./RL:./RC:.

it returns to me the content i need, however when i run it via my script below...

#! /bin/bash
pagetext=$(curl https://www.tenable.com/plugins/nessus/64784)
cvss3_temporal=$(grep $pagetext -e CVSS:3.0/E:./RL:./RC:.)
echo $cvss3_temporal

i receive the errors above!

I believe this is because the '--' are causing grep to think the text inside the file that it is an instruction which grep doesnt know hence the error. I have tried copying the output of the curl to a text file and then grepping that rather than straight from the curl but still no joy. Does anyone know of a method to get grep to ignore '--' or any flags when reading text? Or alternatively if i can configure curl so that it only brings back text and no symbols?

Thanks in advance!

Grep filters a given file or standard input if none was given. In bash, you can use the <<< here-word syntax to send the variable content to grep's input:

grep -e 'CVSS:3.0/E:./RL:./RC:.' <<< "$pagetext"

Or, if you don't need the page anywhere else, you can pipe the output from curl directly to grep :

curl https://www.tenable.com/plugins/nessus/64784 | grep -e 'CVSS:3.0/E:./RL:./RC:.'

You don't need to store curl response in a variable, just pipe grep after curl like this:

cvss3_temporal=$(curl -s https://www.tenable.com/plugins/nessus/64784 |
grep -F 'CVSS:3.0/E:./RL:./RC:.')

Note use of -s in curl to suppress progress and -F in grep to make sure you are searching for a fixed string.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM