Sed及awk高级文件处理
- sed流编辑器用法及解析
- awk文本高级处理
No.1 sed流编辑器用法及解析
sed: stream editor(流编辑器)的缩写. 它们最常见的用法是进行文本的替换.
-
sed可以从stdin中读取内容
$ cat filename | sed 's/pattern/replace_string/'
-
选项
-i
会使得用sed修改后的数据替换原文件$ sed -i 's/pattern/replace_string/' filename $ sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
-
g标记可以使sed执行全行替换
$ sed 's/pattern/replace_string/g' filename
-
g标记可以使sed匹配第N次以后的字符被替换
$ echo "thisthisthisthis" | sed 's/this/THIS/2g'
-
sed中的分隔符可以替换成别的字符, 因为s标识会认为后面的字符为分隔符
$ sed 's:text:replace_text:' $ sed 's|text|replace_text|' $ sed 's#text#replace_text#'
-
sed可以利用指令来操作
1.删除文件 第四行 [root@zhaohan ~]# sed '4d' passwd 2. root替换为alice [root@zhaohan ~]# sed -r 's/root/alice/' passwd 如果加上了g 表示进行全局更改 3 从root的行开始删除到第五行 [root@zhaohan ~]# sed -r '/root/,5d' passwd 4 删除所有奇数行,从第一行开始每隔2行删除 [root@zhaohan ~]# sed -r '1~2d' passwd 5 删除所有偶数行,也是每隔2行进行删除 [root@zhaohan ~]# sed -r '0~2d' passwd 7 追加命令a ,a 后面的内容追加到一个文件中 [root@zhaohan ~]# sed -r '2a\1111111' passwd 在第二行后追加 8 命令i 表示在前面插入 [root@zhaohan ~]# sed -r '2i111111' passwd sed 删除注释行及空行: # sed -ri '/^[ \t]*#/d; /^[ \t]*$/d' 给文件行添加注释: # sed -r '2,6s/^/#/' sed -ri '/^#/d' file.conf sed -ri '/^[ \t]*#/d' file.conf 空格和table键 '/^#/d' [ \t] * 空格和table 删除无内容空行 sed -ri '/^[ \t]*$/d' file.conf [root@localhost ~]# sed -i '/^[ \t]*$/d'
-
替换指定的字符串或数字
$ cat sed_data.txt 11 abc 111 this 9 file contains 111 11 99 numbers 0000 $ sed -i 's/\b[0-9]\{3\}\b/NUMBER/g' sed_data.txt $ cat sed_data.txt 11 abc NUMBER this 9 file contains NUMBER 11 99 numbers 0000
-
由于在使用
-i
参数时比较危险, 所以我们在使用i参数时在后面加上.bak就会产生一个备份的文件,以防后悔$ sed -i.bak 's/pattern/replace_string/' filename
-
sed如果在脚本中使用的话, 不可避免的要调用变量, 所以以下这种方式可以用来调用变量即‘’换成了“”
$ text=hello $ echo "hello world" | sed "s/$text/HELLO/"
No.2 awk文本高级处理
语法: awk ‘BEGIN{ print start } { commands } END{ print end }’ filename
awk中的特殊变量:
-
NR: 表示记录编号, 当awk将行为记录时, 该变量相当于当前行号
-
NF: 表示字段数量, 当awk将行为记录时, 该变量相当于当前列号
-
$0: 表示当前记录的文本内容
-
$1: 表示当前记录的第一列文本内容
-
$2: 表示当前记录的第二列文本内容
【原创】
【转载请标明出处】