regex - 使用 [regex] 从 URL 列表中获取带扩展名的 grep 文件名

标签 regex grep

大家好,我正在处理一个网址列表,我只需要 grep 所有以 .asp 或 .aspx 结尾的文件名,并且也不应该有任何重复项,所以我遇到了这个解决方案来删除之前的所有内容最后一个 /.asp

之后

我尝试了这个正则表达式,它删除了最后一个 / 之前的所有内容

([^\/]+$)

例如

abc/abc/abc/xyz.asp >> xyz.asp

但是,如果 .asp 之后有 /,它会在 /

之后开始选择

abc/abc/abc/xyz.asp?ijk=lmn/opq >> opq 我不想要

我只想 grep 包含 .asp.aspx 的字符串,并删除最后一个 / 之前及其之后的每个字符。

我简单地说,我只想 grep filename.aspfilename.aspx

示例输入 https://www.redacted.com/abc/xyz.aspx?something=something

示例输出:

xyz.aspx

示例输入: https://www.redacted.com/abc/xyz/file.aspx?z=x&LOC=http%3A%2F%2Fwww.redacted.com%2Fasp%2Fanotherfile-asp%2F_%2FCRID--7% 2Fthirdfile.asp%3Fui%3Dhash

示例输出:

file.aspx, anotherfile-asp, thirdfile.asp

最佳答案

通过显示的示例,在 GNU awk 中,您可以尝试遵循正则表达式,以及与正则表达式一起使用的 matchRS 函数。

awk -v RS='[^.]*[-\\.]aspx?' '
RT{
  num=split(RT,arr,"[/%2F]")
  for(i=1;i<=num;i++){
    if(arr[i]~/[-.]asp/){
      print arr[i]
    }
  }
}
' Input_file

如果您的文件包含这两行(如您的问题所示),则示例输出将如下所示:

xyz.aspx
file.aspx
anotherfile-asp
thirdfile.asp

解释:简单的解释是,将RS(记录分隔符)设置为[^.]*[-\\.]asp 整个输入文件。然后在主程序中使用 /%2F 吐出记录,并检查是否有任何部分包含 -asp 或 .asp,然后打印匹配的部分,如上面的示例输出所示。

关于regex - 使用 [regex] 从 URL 列表中获取带扩展名的 grep 文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70491533/

相关文章:

regex - 正则表达式选择逗号但不在括号之间

command-line - Silver-searcher 是否能够从文件中获取 PATTERN?

bash - 在 BASH 的文件中找到匹配项后,如何删除上面的两行?

android - grep 精确匹配

正则表达式匹配其他标签(字符串对)

python - 在Python中解析和截断长字符串

Python正则表达式解析并放入多维列表

正则表达式仅匹配正斜杠

linux - 如何组合下面两个 grep 命令

sed - 如何grep仅存在于一行中一定数量的空格内的字符串