我需要一些帮助:寻找一种方法来删除"/"在超链接中使用类似的命令
cat text.txt | grep -o "^((?:[^/]*/){5}).*$"
这个命令对我不起作用。例如,如果我有
https://www.forbes.com/forbes/welcome/?toURL=https://forbes.com/&refURL=&referrer=
我想要的输出是:
https://www.forbes.com/forbes/welcome/
此外,如果链接只有<4/
,我想保留所有东西。
第一个解决方案:
使用awk
,请尝试以下操作。它应该涵盖/?
或?
出现在URL中的两种情况(实际请求中可能是这种情况(。只需将Input_file的所有行的字段分隔符设置为/?\?
,如果行从http
或https
开始,则打印行的第一个字段。
awk -F'/?\?' '/^https?:///{print $1}' Input_file
第二个解决方案:使用GNUawk
及其match
函数,请尝试以下解决方案,与第一个解决方案相比没有什么复杂,但如果您需要检查更多的值,除了在?
之前获取值之外,您可以尝试它,因为它可以将值保存到数组中,因此可以帮助您。
awk 'match($0,/^(https?://([^?]*))?/,arr1){print arr1[1]}' Input_file
假设?
问号可以从哪里排除,您可以尝试此sed
$ sed 's/?.*//' input_file
https://www.forbes.com/forbes/welcome/
您可以匹配协议,如果可用,请使用grep-P
在它之后重复3次/
匹配的非捕获组:
grep -oP "^https?://(?:[^/]*/){3}" text.txt
或grep-E
重复捕获组:
grep -oE "^https?://([^/]*/){3}" text.txt
或者只是用正确的转义grep-o
:
grep -o "^https?://([^/]*/){3}" text.txt
示例
echo "https://www.forbes.com/forbes/welcome/?toURL=https://forbes.com/&refURL=&referrer=" | grep -oP "^https?://(?:[^/]*/){3}"
输出
https://www.forbes.com/forbes/welcome/
请注意,您不必使用cat text.txt |
您可以使用这个grep
,它可以在任何版本的grep
:中工作
grep -oE '([^/]*/){5}' file
https://www.forbes.com/forbes/welcome/
类似地,这个sed
也可以工作:
sed -E 's~(([^/]*/){5}).*~1~' file
https://www.forbes.com/forbes/welcome/
这两种解决方案都将获取由/
分隔的前5个令牌。
awk 'NF<_||NF=_' FS=/ OFS=/ _=5
如果
?
问号可以从哪里排除,您可以尝试:cut -d '?' -f1 input_file