问题:
从 URL 列表中提取所有参数
一个链接,例如,
https://www.google.com/search?q=grep+urls+from+a+file&rlz=1C5CHFA_enIL1008IL1008&oq=grep+urls+from+a+file
我尝试过的:
Grep 任何以 开头?
和结尾的文本,或者以或空字符串=
开头&
和结尾的文本。&
期望的结果:
q
rlz
oq
答案1
您可以使用 grep 和以下--perl-regexp
选项来执行此操作:
grep -Po '(?<=(\?|&))[^&]*(?==)'
(?<=(\?|&))
?
具有或&
之前的字符串[^&]*
任何字符,但&
(?==)
=
后面有一个字符串
答案2
假设您的 URL 位于名为 的文件中file
:
sed -e 's/[^?]*[?]//' -e 's/=[^&]*//g' -e 'y/&/\n/' file
首先删除第一个问号之前的 URL 部分,包括问号本身。
第一次替换后,示例 URL 剩下的内容是
q=grep+urls+from+a+file&rlz=1C5CHFA_enIL1008IL1008&oq=grep+urls+from+a+file
第二次替换删除所有参数值,保留限制&
字符。它删除所有以 a 开头=
且由非&
- 字符组成的字符串。根据您的示例,这会生成以下内容:
q&rlz&oq
最终表达式将每个字符替换&
为文字换行符:
q
rlz
oq