查看您以前的帖子,我认为这就是您真正想要的:
$ cat file
This is a file, my name is Karl, what is this process, karl is karl junior, file is a test file, file's name is file.txt
My name is not Karl, my name is Karl Joey
What is your name?
Do you know your name and what it is?
$ awk -v tgt="is" '
BEGIN { FS = "(^|[^[:alpha:]])" tgt "([^[:alpha:]]|$)" }
NF>1 {
printf "%s:", tgt
for (i=2; i<=NF; i++)
printf "%s%s", NR, (i<NF?",":ORS)
}' file
is:1,1,1,1,1,1
is:2,2
is:3
is:4
如果您有 GNU awk,则可以使用 \\< 和 \\> 代替 (^|[^[:alpha:]]) 和 ([^[:alpha:]]|$)。
您应该在示例输入和预期输出中包含Is 行(混合大小写),以向我们展示您的脚本是否应该区分大小写。以上是区分大小写的,如果您不想将其更改为:
$ awk -v tgt="is" '
BEGIN { FS = "(^|[^[:alpha:]])" tolower(tgt) "([^[:alpha:]]|$)" }
{ $0 = tolower($0) }
NF>1 {
printf "%s:", tgt
for (i=2; i<=NF; i++)
printf "%s%s", NR, (i<NF?",":ORS)
}' file
请注意,这只是 @jaypal 对您之前的问题 https://stackoverflow.com/a/25336554/1745001 给出的 gawk 特定答案的变体。