linux-command-05 nl和EOF
nl
概念解析
nl是一个LINUX命令,可以为输出列加上编号。nl 提供了非常多的参数使用,可以定义到很细很细的程序来制定它下好编号的输出。
通俗来讲,nl命令在linux系统中用来计算文件中行号。nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等等的功能。
语法
1 | nl [选项]... [文件]... |
参数
1 | -w :行号栏位的占用的位数。 |
解析
nl 命令读取 File 参数(缺省情况下标准输入),计算输入中的行号,将计算过的行号写入标准输出。 在输出中,nl 命令根据您在命令行中指定的标志来计算左边的行。 输入文本必须写在逻辑页中。每个逻辑页有头、主体和页脚节(可以有空节)。 除非使用 -p 标志,nl 命令在每个逻辑页开始的地方重新设置行号。 可以单独为头、主体和页脚节设置行计算标志(例如,头和页脚行可以被计算然而文本行不能)。
实例解析
首先准备测试文件
1 | [root@node4 ~]# cat 1.txt |
可以看到,cat -n具有将输出内容加上行号的功能,nl不加参数时显示的结果和其一模一样。
我们现在在1.txt每一行后面追加一行空行
1 | [root@node4 ~]# sed -i 'G' 1.txt |
1.显示空行行号和不显示空行行号
1 | [root@node4 ~]# nl -b a 1.txt |
2.让行号前面自动补上0,统一输出格式,用参数-n rz :行号在萤幕的最左方显示。默认的行号为6位数。
1 | [root@node4 ~]# nl -b a -n rz 1.txt |
3.让行号前面自动补上0,统一输出格式,用参数-n rz :行号在萤幕的最左方显示。设置行号为3位数。
1 | [root@node4 ~]# nl -b a -n rz -w 3 1.txt |
4.用EOF将标准输入的内容编号
1 | [root@node4 ~]# nl <<EOF |
EOF
概念解析
EOF是END Of File的缩写,表示自定义终止符。在平时的运维工作中,我们经常会碰到这样一个场景:执行脚本的时候,需要往一个文件里自动输入N行内容。如果是少数的几行内容,还可以用echo追加方式,但如果是很多行,那么单纯用echo追加的方式就显得愚蠢之极了!这个时候,就可以使用EOF结合cat命令进行行内容的追加了。
语法
1 | <<EOF //开始 |
实例解析
EOF+cat
1.将输入内容输出显示
1 | [root@node4 ~]# cat << EOF |
2.将输入内容输出到2.txt。(不用提前touch创建2.txt,因为EOF输出内容到2.txt时会自动创建2.txt)
1 | [root@node4 ~]# cat << EOF >2.txt |
3.将输入内容追加到2.txt
1 | [root@node4 ~]# cat << EOF >> 2.txt |
4.将输入内容覆盖2.txt的原内容
1 | [root@node4 ~]# cat << EOF > 2.txt |
5.使用自定义的EOF,例如随便起个名字abc
1 | [root@node4 ~]# cat << abc >> 2.txt |
对比之下,echo的追加和覆盖
可以看到如果要加很多行的话,用echo是很麻烦的。
1 | [root@node4 ~]# echo "hello 14" > 4.txt |
EOF+nl
我们将标准输入内容加上行号后再输出到3.txt里面。结果如下,3.txt里面每一行内容都具有了行号,如果此时依然用nl显示3.txt,就会出现两排行号的尴尬情况。
1 | [root@node4 ~]# nl << EOF > 3.txt |
EOF+CAT+脚本
1 | [root@node4 ~]# vim eof.sh |