sed流式编辑器
逐行处理,可以非交互式对文本、脚本进行修改查看等操作
[dmtsai@study ~]$ sed 选项 [动作]
选项:
-n :在一般sed 的用法中,所有来自STDIN 的资料一般都会被列出到屏幕上。
但如果加上-n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在指令列模式上进行sed 的动作编辑;
-f :直接将sed 的动作写在一个档案内, -f filename 则可以执行filename 内的sed 动作;
-r :sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i :直接修改读取的档案内容,而不是由屏幕输出。
动作说明:
a 新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c 替换, c 的后面可以接字串,这些字串可以取代n1,n2 之间的行!
d 删除,因为是删除啊,所以d 后面通常不接任何东西;
i 插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p 打印,通常p 会与参数sed -n 一起运作~
r 读某文件的内容到目标文件
例子:
sed 'r a.txt' abc.txt //将a.txt中的内容读到abc.txt的每行后
w 写入目标文件的内容到其他文档
sed 'w a.txt' abc.txt //将abc.txt中的内容覆盖保存到a.txt中,如果a.txt不存在则创建
sed 's/要被取代的字串/新的字串/g' //sed部分资料的搜寻并取代的功能
1.将test.txt内每一行结尾.则换成!
[ymtk2 ~]$ sed -i 's/.$/!/g' test.txt
2.直接在test.txt最后一行加入『# This is a test』
[ymtk2 ~]$ sed -i '$a # This is a test' test.txt
#由于$代表的是最后一行,而a的动作是新增,因此该档案最后新增
3.将/etc/passwd的内容列出并且列印行号,同时删除2-5行
[deploy@i-ka6ymtk2 ~]$ nl /etc/passwd | sed '2,3d'
1 root:x:0:0:root:/root:/bin/bash
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
………………
4.在/etc/passwd的内容第二行后加上『drink tea?』字样
[deploy@i-ka6ymtk2 ~]$ nl /etc/passwd | sed '2a drink tea' //以行为单位的新增/删除功能nl
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
drink tea
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
………………
sed 查看,修改文本
grep 模糊搜索,能力一般
awk 查看文本内容,可以实现复杂的搜索
awk
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
方法一:
前置命令 | awk 选项 指令
方法二:
awk 选项 指令 文件
awk '{print}' test.txt //使用awk显示文本中所有内容
awk '{print $1}' test.txt //使用awk显示文本中每行的第1列,默认情况下,每列的分隔符是空格或者tab
head -1 /etc/passwd > test2.txt
awk -F: '{print $2}' test2.txt //使用:作为分隔符,显示第2列内容
df -h | awk '{print $4}' //使用前置命令查看磁盘剩余用量
awk -F[:/] '{print $7}' test2.txt //使用:或者/作为分隔符显示文本中第7列,两个分隔符连在一起时,中间的“空”也算一列
awk内置变量 $0显示全部列 $1显示第1列 $2 ....
NR-->行号 NF-->列数
awk '{print $0,$2}' test.txt //显示每行的所有内容,以及第2列
awk '{print NR,NF}' test.txt //显示每行的行号,以及这行一共有多少列
grep
man grep #查看手册
基础正则表达式字符整理
^word 意义:待搜寻的字串(word)在行首
word$ 意义:待搜寻的字串(word)在行尾
. 意义:代表『一定有一个任意字元』的字符
意义:将特殊符号的特殊意义去除
* 意义:重复零个到无穷多个的前一个字符
[list] 意义:集合,里面列出想要截取的字符范围
[n1-n2] 意义:集合,里面列出想要截取的字符范围
[^list] 意义:集合,里面列出不要的字串或范围
{n,m} 意义:连续n到m个的『字符』
意义:若为{n}则是连续n个的前一个字符,若是{n,}则是连续n个以上的前一个字符!