我有一个格式类似于以下内容的文本文件:
PktType1 Header
PktType1 Pay
PktType1 Done
PktType0 Header
PktType0 Pay
PktType0 Done
...
我想做的是 grep 查找所有出现的情况PktType0 Done
,然后注释第 N 个出现的情况以及行号。例如:
1 42 PktType0 Done
2 65 PktType0 Done
3 75 PktType0 Done
其中 42、65 和 75 是行号,1、2 和 3 只是出现次数的计数。我想我可以将其写入文件,然后显示行号。但我想知道是否有一个工具可以将其传递给它,它可以做同样的事情。
答案1
如果您想要的不仅仅是模式匹配,还需要使用行号和匹配计数进行其他格式化,那么 Awk 是比 grep 更好的选择
awk '/PktType0 Done/{ print ++count, NR, $0 }' file
答案2
答案3
使用来自另一个答案的示例数据:
$ cat file
PktType0 Done
PktType1 Header
PktType1 Pay
PktType0 Done
PktType1 Done
PktType0 Header
PktType0 Pay
PktType0 Done
$ awk '$0 == "PktType0 Done" { print ++count, NR, $0 }' file
1 1 PktType0 Done
2 4 PktType0 Done
3 8 PktType0 Done
该awk
命令忽略除那些精确等于字符串的行之外的所有行PktType0 Done
。它打印计数器的值、当前行号和行本身。
更改$0 == "PktType0 Done"
为/PktType0 Done/
可在任意行的任意位置查找作为子字符串的字符串。
答案4
grep -n conf file |
sed -Ee 's/^([[:digit:]]*):/\1 /' |
cat -n
该sed
步骤是因为grep -n
在行号和文本之间放置了一个冒号,这在您想要的输出中没有指出。