nl 和 tail 的行号之间存在差异
Discrepency between line numbers from nl and tail
使用以下命令时:
nl /etc/snort/snort.conf | grep output
我得到以下输出:
33 # 6) Configure output plugins
445 # Step #6: Configure output plugins
450 # output unified2: filename snort.log, limit 128, mpls_event_types, vlan_event_types
所以,我可以看到 Step #6: Configure output plugins
在第 445 行。
我想输出第445行加上前五行(440-444 + 445),所以我用:
tail -n+440 /etc/snort/snort.conf | head -n 6
然而,这给了我完全不同的结果。所以,我用行号搜索整个文件,调查并确实看到 # Step #6: Configure output plugins
行在第 445 行...
在使用 tail 命令反复试验之后,我终于得到了我想要的结果,但是我最初认为在 445 上的那一行实际上是在 529 上。我可以通过将之前的命令编号更改为来验证这一点:
tail -n+524 /etc/snort/snort.conf | head -n 6
然后我得到了最初预期的结果,显示了五行配置文件,# Step #6: Configure output plugins
作为输出的最后一行。
为什么感知到的行号之间存在差异(445 与 529)?
看看 nl
的原始输出。它不对空行进行编号。
$ nl /etc/snort/snort.conf
...
32 ###################################################
33 # Step #1: Set the network variables. For more information, see README.variables
34 ###################################################
35 # Setup the network addresses you are protecting
36 ipvar HOME_NET any
37 # Set up the external network addresses. Leave as "any" in most situations
38 ipvar EXTERNAL_NET any
39 # List of DNS servers on your network
40 ipvar DNS_SERVERS $HOME_NET
41 # List of SMTP servers on your network
42 ipvar SMTP_SERVERS $HOME_NET
43 # List of web servers on your network
44 ipvar HTTP_SERVERS $HOME_NET
...
使用-ba
对所有行进行编号。默认值为 -bt
:仅对非空行进行编号。
nl -ba /etc/snort/snort.conf | grep output
文件a.sh
有5行,其中一行是空行
nl a.sh
1 #!/bin/bash
2 export hello="world"
3 sh abc.sh
4 echo
当我计算行数时,它给了我 5 :
cat a.sh|wc -l
5
所以这意味着 head 和 tail 显然考虑空行但是 nl
只是给非空行提供行号。
使用以下命令时:
nl /etc/snort/snort.conf | grep output
我得到以下输出:
33 # 6) Configure output plugins
445 # Step #6: Configure output plugins
450 # output unified2: filename snort.log, limit 128, mpls_event_types, vlan_event_types
所以,我可以看到 Step #6: Configure output plugins
在第 445 行。
我想输出第445行加上前五行(440-444 + 445),所以我用:
tail -n+440 /etc/snort/snort.conf | head -n 6
然而,这给了我完全不同的结果。所以,我用行号搜索整个文件,调查并确实看到 # Step #6: Configure output plugins
行在第 445 行...
在使用 tail 命令反复试验之后,我终于得到了我想要的结果,但是我最初认为在 445 上的那一行实际上是在 529 上。我可以通过将之前的命令编号更改为来验证这一点:
tail -n+524 /etc/snort/snort.conf | head -n 6
然后我得到了最初预期的结果,显示了五行配置文件,# Step #6: Configure output plugins
作为输出的最后一行。
为什么感知到的行号之间存在差异(445 与 529)?
看看 nl
的原始输出。它不对空行进行编号。
$ nl /etc/snort/snort.conf
...
32 ###################################################
33 # Step #1: Set the network variables. For more information, see README.variables
34 ###################################################
35 # Setup the network addresses you are protecting
36 ipvar HOME_NET any
37 # Set up the external network addresses. Leave as "any" in most situations
38 ipvar EXTERNAL_NET any
39 # List of DNS servers on your network
40 ipvar DNS_SERVERS $HOME_NET
41 # List of SMTP servers on your network
42 ipvar SMTP_SERVERS $HOME_NET
43 # List of web servers on your network
44 ipvar HTTP_SERVERS $HOME_NET
...
使用-ba
对所有行进行编号。默认值为 -bt
:仅对非空行进行编号。
nl -ba /etc/snort/snort.conf | grep output
文件a.sh
有5行,其中一行是空行
nl a.sh
1 #!/bin/bash
2 export hello="world"
3 sh abc.sh
4 echo
当我计算行数时,它给了我 5 :
cat a.sh|wc -l
5
所以这意味着 head 和 tail 显然考虑空行但是 nl
只是给非空行提供行号。