使用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