大家,早安,
我有一个包含多行的文本文件。我想找到其中的常规模式并使用 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)
任何帮助,将不胜感激!!
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)