大家好,我作業的網址,我只需要到grep所有檔案名以.asp或的.aspx和不應該有任何重復也結束,所以我碰到這個解決方案來之前的最后去除一切的名單/和后.asp
我嘗試了這個正則運算式,它在最后一個之前洗掉了所有內容 /
([^\/] $)
例如
abc/abc/abc/xyz.asp >> xyz.asp
但是如果有/之后.asp它開始選擇之后/
abc/abc/abc/xyz.asp?ijk=lmn/opq>>opq我不想要的
我只想 grep 具有.asp和.aspx洗掉最后一個之前/和之后的每個字符的字串。
我簡單的話我想 grepfilename.asp或filename.aspxonly
樣本輸入
https://www.redacted.com/abc/xyz.aspx?something=something
示例輸出:
xyz.aspx
樣本輸入:
https://www.redacted.com/abc/xyz/file.aspx?z=x&LOC=http://www.redacted.com/asp/anotherfile-asp/_/CRID--7/thirdfile.asp?ui=hash
示例輸出:
file.aspx, anotherfile-asp, thirdfile.asp
uj5u.com熱心網友回復:
使用您顯示的示例,在 GNU 中,awk您可以嘗試遵循正則運算式及其match與正則運算式一起使用的RS 函式。
awk -v RS='[^.]*[-\\.]aspx?' '
RT{
num=split(RT,arr,"[//]")
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整個 Input_file。然后在主程式中記錄//并檢查是否有任何部分包含 -asp 或 .asp 然后列印匹配的部分,如上面的示例輸出所示。
uj5u.com熱心網友回復:
這是 Python,但正則運算式應該在其他地方作業。
import re
s1 = "https://www.redacted.com/abc/xyz.aspx?something=something"
s2 = "https://www.redacted.com/abc/xyz/file.aspx?z=x&LOC=http://www.redacted.com/asp/anotherfile-asp/_/CRID--7/thirdfile.asp?ui=hash"
# We want the set of things that is not a slash, until we get to .asp or
# .aspx, followed either by ? or end of string.
name = r"[^/]*\.aspx?((?=\?)|$)"
for s in s1,s2:
print( re.search( name, s ).group() )
輸出:
xyz.aspx
file.aspx
uj5u.com熱心網友回復:
另一種選擇是使用awk并首先拆分不應該成為結果一部分的 URL 編碼部分。
然后從所有部分中,僅匹配不包含/且以 asp 結尾的字串,并帶有可選的 x,并且前面是-或.
awk '
{
n = split($0 ,a, /(%[A-F0-9] ) /)
for (i=1; i <= n; i ) {
if (match(a[i], /[^/] [.-]aspx?/)){
print substr(a[i], RSTART, RLENGTH)
}
}
}
' file
輸出
file.aspx
anotherfile-asp
thirdfile.asp
xyz.aspx
如果支持 grep -P,您還可以使用與 Perl 兼容的正則運算式來跳過 URL 編碼部分:
grep -oP "(?:%[A-F0-9] ) (*SKIP)(*F)|(?:(?!%[A-F0-9])[^/])*[-.]aspx?" file
請參閱正則運算式演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/396638.html
