• Shell 实现文件基本操作(sed-编辑、awk-匹配)


    使用Shell 自带的工具,实现对文本类文件的操作,满足日常数据处理的需求。

    一、命令 sed -编辑工具

    sed 是一款功能强大的非交互流式文本编辑器,可实现替换文件中的单词,一次处理一行内容,首先将该行内容放入缓存,在缓存中处理,完成后将缓存内容发送到终端。
    基本语法sed [option] [set命令] filename

    选项参数

    sed -e 直接在指令模式进行sed编辑,当命令行多个sed才需要-e选项;
    sed -i 直接对内容进行修改,不加该参数则只是预览;
    sed -f 后跟保存了sed指令的文件;
    sed -n 取消默认输出。

    set 命令功能参数

    a add新增,a的后面连接字符串;
    c change 更改,更改匹配行的内容;
    d delete 删除,删除匹配的内容;
    i insert 插入,想匹配行前插入内容;
    s substitute 替换,替换匹配到的内容;
    n 读取下一行。

    demo演示

    1)指定行号前或后插入数据
    原始文件如下所示。
    在这里插入图片描述
    行后插入,执行命令 sed -i ‘3a北京西城’ info.txt ,在第三行前添加北京西城,这里加i参数,是直接修改文件,执行结果如下所示。
    在这里插入图片描述
    行前插入,执行命令 sed -i ‘3i北京昌平’ info.txt ,在第三行前添加北京西城,执行结果如下所示。
    在这里插入图片描述
    2)指定内容前后插入内容
    支持正则
    行前插入,执行命令 sed ‘/北京/ihello’ info.txt ,在北京开头之前行插入 hello,执行结果如下所示。
    在这里插入图片描述
    3)最后一行后插入内容
    行后插入,执行命令 sed ‘$alove java’ info.txt ,在最后一行插入love java,执行结果如下所示。
    在这里插入图片描述
    4)删除指定范围内容
    删除用 d 命令功能,执行 sed ‘5,6d’ info.txt,即 删除5-6行,执行结果如下所示。
    在这里插入图片描述
    取反删除,执行 sed ‘1,3!d’ info.txt,即 保留1-3行,执行结果如下所示。
    在这里插入图片描述
    5)删除匹配行及其后面行
    匹配行及其后内容,执行命令 sed ‘/张家口/,+1d’ info.txt,使用+1,执行结果如下图所示。
    在这里插入图片描述
    6)替换匹配行第一个指定的字符串
    匹配行替换,执行命令 sed ‘s/北京/北京市/’ info.txt,使用 s,将北京替换成北京市,执行结果如下图所示。
    在这里插入图片描述
    全局替换,执行命令 sed ‘s/北京/北京市/g’ info.txt,使用 g 全局匹配。
    替换第2个,执行命令 sed ‘s/北京/北京市/2’ info.txt,指定2,表示第2个。
    替换第2个并写入文件,执行命令 sed -n ‘s/北京/北京市/2pw infodata.txt’ info.txt,使用 -n 获取匹配的,-p 打印出来,w 写入文件。
    7)每行末尾拼接 text
    匹配行替换,执行命令 sed ‘s/dollar/& test/’ info.txt,使用 s,将北京替换成北京市,执行结果如下图所示。
    在这里插入图片描述
    8)每行首位拼接 #
    匹配行替换,执行命令 sed ‘s/^/&#/’ info.txt,使用 s,将北京替换成北京市,执行结果如下图所示。
    在这里插入图片描述

    注意:替换类的命令,需要 / 来结尾。

    9)查询匹配的内容
    匹配显示字符串,执行命令 sed -n ‘/北京/p’ info.txt,使用 -n 匹配到的,p打印显示,查找北京,执行结果如下图所示。
    在这里插入图片描述
    10)执行多个sed命令
    方式一:用 -e 连接,命令 sed -e ‘1d’ -e ‘s/北京/北京市/g’ info.txt,多个sed 同时执行,效果如下所示。
    在这里插入图片描述
    方式一:用 ; 连接,命令 sed ‘1d;s/北京/北京市/g’ info.txt,多个sed 同时执行,效果如下所示。
    在这里插入图片描述

    二、命令 awk -分析工具

    awk 强大的文本分析工具,把文件逐行读入,以空格默认分隔符将每行切片,切片部分进行各种分析处理。
    基本语法 awk option ‘pattern{action}’ filename{}

    选项参数

    -F 指定输入文件拆分的分隔符;
    -v 赋值一个用户定义变量。

    内置函数

    NF 浏览记录的域的个数,根据分隔符分割后的列数;
    NR 行号,已读的行数;
    $n $0变量值整条记录,$1 当前行第一个域

    $NF number finally 表示最后一列信息。

    demo演示

    数据准备:复制文件 cp /etc/passwd ./
    1)匹配打印数据
    执行命令,echo “我 爱 中国 北京” | awk ‘{print $1"&“$2”&“$3”&"$4}’ ,空格分割抽取数据,按占位符拼接匹配,执行效果如下图所示。
    在这里插入图片描述
    2)正则查询
    执行命令,ls -a | awk ‘/^c/’ ,打印 c 开头的文件,执行效果如下图所示。
    在这里插入图片描述
    3)按列打印
    打印第一列,执行命令,awk -F: ‘{print $1}’ passwd,即 $1,执行效果如下图所示。
    在这里插入图片描述
    打印倒数第一列,执行命令,awk -F: ‘{print $NF}’ passwd,即 NF,执行效果如下图所示。
    在这里插入图片描述
    打印倒数第二列,执行命令,awk -F: ‘{print $(NF-1)}’ passwd,即 NF-1,执行效果如下图所示。
    在这里插入图片描述
    4)打印指定行
    打印第10-18行,执行命令,awk -F: ‘{if(NR>=10 && NR<=18){print $1}}’ passwd,执行效果如下图所示。
    在这里插入图片描述
    5)添加开始和结束信息
    开始结束添加说明文字,执行命令,echo -e “henu\nzknu” | awk ‘BEGIN{print “welcome…”}{print $0}END{print "end… "}’,执行效果如下图所示。
    在这里插入图片描述
    6)循环遍历输出打印
    循环,执行命令,echo “北京 上海 深圳 驻马店 " | awk -v str=”" ‘{for(n=1;n<=NF;n++){ str=str dollar n}} END {print str}’,执行效果如下图所示。
    在这里插入图片描述
    7)添加空行并显示行号
    添加空行,执行命令,sed ‘G’ info.txt,隔行插入空行,执行效果如下图所示。
    在这里插入图片描述
    显示空行的行号,执行命令,awk ‘/^dollar/{print}’,NR表示行号,执行效果如下图所示。
    在这里插入图片描述

    文本操作四剑客( grep sed awk cut)
    grep 用于查找匹配的行;
    cut 截取数据,按列分隔符提取按个计算,不适合截取文件中存在多个空白符;
    sed 增删查改,用于文本中按行截取;
    awk 截取分析数据,在某个文件中以竖列截取分析数据,若存在多个空格也支持。

  • 相关阅读:
    驱动开发:内核监控FileObject文件回调
    Spring 项目的创建和 “使用“
    【C++初阶】关键字&命名空间&缺省函数&函数重载入门必看!!!超详解!!!
    多玩家“角力”会议平板
    LHS RHS
    PerfView专题 (第一篇):如何寻找 C# 热点函数
    mysql 报错 is too long for user name (should be no longer than 16)
    VC6 WIN32,Dialog为主窗口编程
    [Kettle] 生成随机数
    使用 PyTorch 实现 Word2Vec 中Skip-gram 模型
  • 原文地址:https://blog.csdn.net/u012190388/article/details/125473765