使用awk线匹配模式
工具使用awk线匹配模式,awk,Awk,工具awk具有类似的线型匹配 /pattern/ { statements; } 有没有办法将模式的字符串作为变量,用于匹配表达式等 或者更好,直接获得: 模式匹配文本 模式匹配长度 如果模式中有任何(组),则匹配组 在{statements}块中?请您尝试以下内容 第一:获取匹配文本match是最佳选择 awk 'match($0,/regex/){print substr($0,RSTART,RLENGTH)}' Input_file 第二:要获取匹配字符串的长度: awk 'ma
awk
具有类似的线型匹配
/pattern/ { statements; }
有没有办法将模式的字符串
作为变量,用于匹配
表达式等
或者更好,直接获得:
- 模式匹配文本
- 模式匹配长度
- 如果模式中有任何
,则匹配组(组)
在
{statements}
块中?请您尝试以下内容
第一:获取匹配文本match
是最佳选择
awk 'match($0,/regex/){print substr($0,RSTART,RLENGTH)}' Input_file
第二:要获取匹配字符串的长度:
awk 'match($0,/regex/){print RLENGTH}' Input_file
第三:要获得所有匹配的模式,请使用
,而循环匹配,直到在行中找到匹配,我们应该获得所有匹配的模式。请尝试以下模式
第一:获取匹配文本match
是最佳选择
awk 'match($0,/regex/){print substr($0,RSTART,RLENGTH)}' Input_file
第二:要获取匹配字符串的长度:
awk 'match($0,/regex/){print RLENGTH}' Input_file
第三:要获得所有匹配的模式,请使用,而使用match循环,直到在第行中找到匹配,我们应该获得所有匹配的模式。如果使用GNU awk,而不是在条件部分使用/pattern/
,请使用match
及其第三个参数match(string,regexp[,array])
您可以访问匹配的文本、起始索引、长度和组:
$ echo foobar |
gawk 'match($0, /(fo*)(b.*)/, a) {
print a[0],a[0,"start"],a[0,"length"] # 0 index refers to whole matched text
print a[2],a[2,"start"],a[2,"length"] # 1, 2, etc. to matched groups
}'
foobar 1 6
bar 4 3
有关更多信息,请参阅。如果您使用GNU awk,而不是在条件部分使用/pattern/
,请使用match
及其第三个参数match(string,regexp[,array])
可以访问匹配的文本、开始索引、长度和组:
$ echo foobar |
gawk 'match($0, /(fo*)(b.*)/, a) {
print a[0],a[0,"start"],a[0,"length"] # 0 index refers to whole matched text
print a[2],a[2,"start"],a[2,"length"] # 1, 2, etc. to matched groups
}'
foobar 1 6
bar 4 3
有关更多信息,请参阅。如果您可以发布一个示例,我也可以用输出更新我的答案:)您的问题将包含一个简洁、可测试的示例输入和预期输出,以便我们能够最好地帮助您。看看这是否还不清楚。如果你能发布一个例子,我也可以用输出更新我的答案:)你的问题要包括一个简洁、可测试的样本输入和预期输出,这样我们才能最好地帮助你。看看这是否还不清楚。啊哈,你可以在模式表达式中使用match,你不必在if
块中使用它!这就是我错过的线索。你认为b.*
在你的regexp中是什么意思?不,这并不意味着:-)。我有点困惑它是否有效,只是把它放在那里,不希望有人注意到它,所以谢谢你的注意DAha,您可以在模式表达式中使用match,您不必在if
块中使用它!这就是我错过的线索。你认为b.*
在你的regexp中是什么意思?不,这并不意味着:-)。我有点困惑它是否有效,只是把它放在那里,不希望有人注意到它,所以谢谢你的注意D