首页 > 解决方案 > 如何检索位于bash中模式之后的字符串

问题描述

我有一个大文件。我想检索恰好在此字符串之后的单词:“PatterStr()”。

两个示例行:

PatterStr().123232424 hhhhh 9999.  test, test32312
66666666698977.         PatterStr().8888

输出应该是:

123232424
8888

当我使用 grep 时,将打印整行当在一行中找到两个模式时,都应该打印,例如:

PatterStr().123232424 hhhhh 9999.  test, test32312.  PatterStr().11111111
66666666698977.         PatterStr().8888

正确的结果:

123232424
11111111
8888

标签: linuxbashshellawk

解决方案


请您尝试以下操作。

awk '
{
  while(match($0,/PatterStr\(\)\.[0-9]+/)){
    value=substr($0,RSTART,RLENGTH)
    sub(/.*\./,"",value)
    print value
    $0=substr($0,RSTART+RLENGTH)
    value=""
  }
}'  Input_file

输出如下。

123232424
11111111
8888

上述代码解释:为上述代码添加详细级别的解释。

awk '                                              ##Starting awk program from here.
{
  while(match($0,/PatterStr\(\)\.[0-9]+/)){        ##Starting while loop which has match function to match regex of PatterStr(). till all digits here.
    value=substr($0,RSTART,RLENGTH)                ##Creating variable value which has sub-string value of current line, startin point RSTART tioll RLENGTH.
    sub(/.*\./,"",value)                           ##Substituting everything till DOT with NULL in variable value here.
    print value                                    ##Printing variable value here.
    $0=substr($0,RSTART+RLENGTH)                   ##Setting rest of sub-string value starting from RSTART+RLENGTH to last of line of current line here.
    value=""                                       ##Nullify variable value here.
  }
}'  Input_file                                     ##Mentioning Input_file name here.

推荐阅读