I am trying to return a string that is constantly changing via the output. I decided grep and sed might be the best way to handle this. Basically the output renders a large field of text that contains something to the effect of
https://rancher.website.com/version1/proj/abcd123?somethingsomethingsomethingetc
the goal is to return the FIRST instance of
https://rancher.website.com/version1/proj/
as there are multiple, and then return the contents of abcd123 up to the ? symbol before it.
I keep trying to tweak the sed command but keep running into errors with my syntax and I am having trouble wrapping my mind around the explanations given so far. I think one of my problems might be around the fact that the sed "search" for lack of a better term, is being run against a string rather than a single character. Also the forward slashes are a problem as I think those are being interpreted as operators in the sed command?
Command I am trying to use is more or less:
grep 'https://rancher.website.com/version1/projects/' grep.txt | sed 's/^.*'https:\/\/rancher.website.com\/version1\/projects\/'//g'
With grep.txt being the container for the output text of the initial command
CodePudding user response:
Replace everything up to the last / and everything from ? with empty strings.
grep -m 1 'https://rancher.website.com/version1/projects/' grep.txt |
sed -e 's#.*/##' -e 's#\?.*##'
When the pattern includes /, use a different character as the s delimiter to avoid having to escape it; I've used # above.
