提取正则表达式匹配 grep 的第一个位置

Tia*_*ava 5 awk grep

大家,早安,

我有一个包含多行的文本文件。我想找到其中的常规模式并使用 grep 打印其位置。

例如:

ARTGHFRHOPLIT
GFRTLOPLATHLG
TGHLKTGVARTHG
Run Code Online (Sandbox Code Playgroud)

我想在文件中找到L[any_letter]T并打印L的位置和三字母代码。在这种情况下,结果将是:

11 LIT
8 LAT
4 LKT
Run Code Online (Sandbox Code Playgroud)

我在 grep 中编写了代码,但它没有返回我需要的内容。代码是:

grep -E -boe "L.T" file.txt
Run Code Online (Sandbox Code Playgroud)

它返回:

11:LIT
21:LAT
30:LKT
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激!!

anu*_*ava 5

Awk 更适合这个:

awk 'match($0, /L[[:alpha:]]T/) {
print RSTART, substr($0, RSTART, RLENGTH)}' file

11 LIT
8 LAT
4 LKT
Run Code Online (Sandbox Code Playgroud)

这是假设每行只有一个这样的匹配。


如果每行可以有多个重叠匹配,则使用:

awk '{
   n = 0
   while (match($0, /L[[:alpha:]]T/)) {
      n += RSTART
      print n, substr($0, RSTART, RLENGTH)
      $0 = substr($0, RSTART + 1)
   }
}' file
Run Code Online (Sandbox Code Playgroud)