Linux | 三剑客
sed
流编辑器
对文件,数据流进行加工处理。sed有一个模式空间,读取每一行然后按照规则进行模式匹配
-
参数
-n 取消默认输出,也就是不符合规则的不会输出 -i 将结果写入文件,改变文件内容
-
内置命令
a 文件追加 1a表示在第一行后追加内容 d 删除匹配的内容 i 插入 4i 表示在第四行插入内容 g 全局匹配 p 打印匹配结果
-
实例
输出: sed -n "2,3p" test // 输出test文件的2,3行 sed -n '/^#/!d' < ifile // 显示ifile文件中的所有注释行 sed '/^[[:space:]]*#/d;/^[[:space:]]*$/d' filename // 先删除所有以#开头的行(注释行),再删除所有空行,剩下的就是非注释行了 删除: sed -i "/ganme/d" test // 匹配test文件中有game的行,然后删除 sed "5, $d" test // 删除第五行之后的所有行 替换: sed -e "s/my/I/gp" test // 替换test文件的My为I,g表示全部替换,p表示打印 插入: sed "4i hello" test sed "2a hello" test // 插入文件内容 sed "a hello" test // 每一行之后 ifconfig eth0 | sed "2p" -n | sed "s/^.*inet//" | sed "s/net.*$//" 相当于 ifconfig eth0 | sed -e "2s/^.*inet//" -n -e "2s/net.*$//" -n ^.*inet 表示以inet开头的前面任何字符 $表示结尾
awk命令
用于格式化文本内容,对文本进行复杂处理。
-
awk 可选参数 模式 {action}动作print file
-
内置变量
NF 表示 域/列号 $NF 表示最后一列 NR 表示行号 FNR 多个文件处理,每个文件行号从1开始 FS 表示输入分隔符,默认是空格 OFS 表示输出分隔符,默认也是空格 RS 输入时记录分割符,默认为回车键 ORS 输出域/记录分割符,默认为空格/回车 ARGC 参数个数 ARGV 参数数组 ARGV[0] 为 awk; ARGV[1] 为文件名
-
参数
-F 指定分隔符 -v 修改变量
-
模式
BEGIN模式 和 END模式
-
实例
awk -F "#" -v OFS="----" 'NR==3,NR==6{print NR,$1,$NF}' file // 表示输入分隔符是#,输出分隔符是---,3-6行数据 awk -v name="zxw" 'BEGIN{print "my name is",name} {print FNR,$0,$NF} END{print "awk结束了"}' file1 file2 // 表示在输出内容前输出 my name is zxw FNR表示两个文件行号从1开始 awk '/game/{print NR,$0}' file // 找到game出现的行
评论区