如何匹配或捕获这些字符串:
到目前为止,已经尝试了这两种正则表达式模式,它们都实现了相同的逻辑匹配:
/file="ZZ([^-]+)-[^"]+\.XML"/
- awk
/(?<=ZZ)\w++/
- awk不支持
要在awk中处理的文本:
file="ZZ12345678-20170101.XML"
file="ZZ87654321-19990101.XML"
file="ZZAA123456-20170101.XML"
file="ZZAA123456-20170101.XML"
file="ZZAA123456A1-20170101.XML"
file="ZZBB654321B2-19990101.XML"
file="ZZCC123456C3-20170101.XML"
问题匹配是一系列数字之后的一个字母和一个数字A1
,B2
,C3
。问题始终是一系列数字后的单个字母和数字。
file="ZZ12345678-20170101.XML"
正确匹配12345678
file="ZZ87654321-19990101.XML"
正确匹配87654321
file="ZZAA123456-20170101.XML"
正确匹配AA123456
file="ZZBB654321-20170101.XML"
正确匹配BB654321
file="ZZAA123456A1-20170101.XML"
错误地匹配AA123456A1
目标匹配AA123456
file="ZZBB654321B2-19990101.XML"
错误地匹配BB654321B2
目标匹配BB654321
file="ZZCC123456C3-20170101.XML"
错误地匹配CC123456C3
目标匹配CC123456
感谢帮助和示例方法
答案 0 :(得分:3)
$ sed 's/.*ZZ\([[:upper:]]*[0-9]*\).*/\1/' file
12345678
87654321
AA123456
BB654321
AA123456
BB654321
BB654321
或使用GNU awk为第3个arg匹配():
$ awk 'match($0,/ZZ([[:upper:]]*[0-9]*)/,a){print a[1]}' file
12345678
87654321
AA123456
BB654321
AA123456
BB654321
BB654321
或gensub()的GNU awk:
$ awk '{print gensub(/.*ZZ([[:upper:]]*[0-9]*).*/,"\\1",1)}' file
12345678
87654321
AA123456
BB654321
AA123456
BB654321
BB654321
答案 1 :(得分:2)
使用sed
:
sed -E 's/^file=\"ZZ([A-Z]*[0-9]+)[^-]*-[^"]+\.XML\"$/\1/' file
12345678
87654321
AA123456
BB654321
AA123456
BB654321
BB654321
或者您可以使用gnu-awk
:
awk '{print gensub(/^file=\"ZZ([A-Z]*[0-9]+)[^-]*-[^"]+\.XML\"$/, "\\1", "1")}' file
或使用gnu grep
:
grep -oP '(?<=file=\"ZZ)([A-Z]*[0-9]+)(?=[^-]*-[^"]+\.XML\"$)' file
答案 2 :(得分:1)
尝试:
DashboardController
使用awk的匹配函数,它正在寻找从字母表到正确数字的正则表达式,然后打印它的子字符串,从RSTART + 2开始直到RLENGTH-2的长度。
答案 3 :(得分:1)
$('select').click(function(){
var clicked_select = $(this).attr('data-bind');
// clicked_select will be the number which dynamic element you have clicked. You can use that number with id to access that particular element as a new selector.
});