目 录CONTENT

文章目录

Linux | 三剑客

RobKing
2022-05-20 / 0 评论 / 1 点赞 / 213 阅读 / 680 字

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出现的行
    

1

评论区