一、nl命令
1、nl命令在linux系统中用来计算文件中行号
-b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
-b t :如果有空行,空的那一行不要列出行号(默认值);
-n :列出行号表示的方法,主要有三种:
-n ln :行号在萤幕的最左方显示;
-n rn :行号在自己栏位的最右方显示,且不加 0 ;
-n rz :行号在自己栏位的最右方显示,且加 0 ;
二、sed命令
1、Linux sed 命令是利用脚本来处理文本文件。
2、sed 可依照脚本的指令来处理、编辑文本文件。
3、Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
参数说明:
-
- -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
- -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
- -h或--help 显示帮助。
- -n或--quiet或--silent 仅显示script处理后的结果。
- -V或--version 显示版本信息。
动作说明:
-
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
- d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
- s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
4、样例
1>在testfile文件的第四行后添加一行,并将结果输出到标准输出,在命令行提示符下输入如下命令:
$ sed -e 4a\newline testfile #使用sed 在第四行后添加新字符串
newline : 文本内容
testfile:指定修改的文件
2>将 /etc/passwd 的内容列出并且显示行号,同时,删除操做!
# 删除2~5行
$ nl /etc/passwd | sed ‘2,5d‘
# 只删除第二行
$ nl /etc/passwd | sed ‘2d‘
# 删除第三行到最后一行
$ nl /etc/passwd | sed ‘3,$d‘
# 在第二行后(亦即是加在第三行)加上『drink tea?』字样!
$ nl /etc/passwd | sed ‘2a drink tea‘
# 如果是要在第二行前
$ nl /etc/passwd | sed ‘2i drink tea‘
# 将第2-5行的内容取代成为『No 2-5 number』呢?
$ nl /etc/passwd | sed ‘2,5c No 2-5 number‘
d:删除
a:追加
3>数据查询和显示操作
# 搜索 /etc/passwd有root关键字的行 # 如果root找到,除了输出所有行,还会输出匹配行。 $ nl /etc/passwd | sed ‘/root/p‘ # 使用-n的时候将只打印包含查询到内容的行。 $ nl /etc/passwd | sed -n ‘/root/p‘
-n:只显示查询到的内容行
p:打印
4>数据查询并进行查询到的数据进行删除
# 删除/etc/passwd所有包含root的行,其他行则继续输出 $ nl /etc/passwd | sed ‘/root/d‘
5>数据查询并执行相关命令
# 搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行: $ nl /etc/passwd | sed -n ‘/root/{s/bash/blueshell/;p;q}‘
q:退出
6>数据的查询并替换
# 除了整行的处理模式之外, sed 还可以用进行部分数据的搜寻并取代。 # 不改变原始文本,只作展示效果,目前感觉没有用处 $ sed ‘s/要被取代的字串/新的字串/g‘
s:查询
7>正则匹配操作
# 原始文本信息 $ /sbin/ifconfig eth0 inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 # 将 IP 前面的部分予以删除 $ /sbin/ifconfig eth0 | grep ‘inet addr‘ | sed ‘s/^.*addr://g‘ # 将 IP 后面的部分予以删除 $ /sbin/ifconfig eth0 | grep ‘inet addr‘ | sed ‘s/^.*addr://g‘ | sed ‘s/Bcast.*$//g‘
8>修改文件内容,系统文件修改前注意备份!!!
# regular_express.txt 内每一行结尾若为 . 则换成 ! $ sed -i ‘s/\.$/\!/g‘ regular_express.txt # 在 regular_express.txt 最后一行加入 # This is a test: $ sed -i ‘$a # This is a test‘ regular_express.txt # regular_express.txt 中aaa改变为123 $ sed -i ‘s/aaa/123/g‘ regular_express.txt
g:全局