如何使用 sed/grep/regex 删除字符第 3 次第 4 次出现后的所有内容

Muh*_*een 1 regex grep sed

我需要一些帮助:寻找一种方法,使用这样的命令删除超链接中第 n 次出现(很可能是第 4 次或第 5 次)“/”之后的所有内容

cat text.txt | grep -o "^((?:[^/]*/){5}).*$"
Run Code Online (Sandbox Code Playgroud)

这个命令对我不起作用。例如,如果我有

https://www.forbes.com/forbes/welcome/?toURL=https://forbes.com/&refURL=&referrer=
Run Code Online (Sandbox Code Playgroud)

我想要的输出是:

https://www.forbes.com/forbes/welcome/
Run Code Online (Sandbox Code Playgroud)

此外,如果链接只有 < 4 /,我想保留所有内容。

Rav*_*h13 5

第一个解决方案:请尝试以下操作awk。它应该涵盖/?OR 的?(实际请求中可能就是这种情况)。只需为您的 Input_file 的所有行创建字段分隔符/?\\?,并打印该行的第一个字段(如果行从httpORhttps

awk -F'/?\\?' '/^https?:\/\//{print $1}' Input_file
Run Code Online (Sandbox Code Playgroud)

第二个解决方案:使用 GNUawk并使用其match功能,请尝试以下解决方案,与第一个解决方案相比有点复杂,但您可以尝试一下,以防万一您需要检查更多值,除了之前获取值之外,?它可以帮助您,因为它可以保存值进入数组。

awk 'match($0,/^(https?:\/\/([^?]*))\?/,arr1){print arr1[1]}' Input_file
Run Code Online (Sandbox Code Playgroud)