zoukankan      html  css  js  c++  java
  • shell学习记录----初识sed和gawk

    Linux命令行与shell脚本编程大全中关于sed和gawk的介绍合在一起,而且结构有点乱。

    不像之前的命令写的很清楚。所以这次我需要写下来整理一下。

    一、sed部分

    1.1 sed命令格式如下:

    sed option script file

    • -e script:在处理输入时,将script中指定的命令添加到已有的命令中
    • -f file:在处理输入时,将file中指定的命令添加到已有的命令中
    • -n: 不产生命令输出,使用print命令来完成输出
    • -e: 执行多个命令

    1.2 script里面又有一些命令:

    s/pattern/replacement/flags 替换命令,flags包括:数字(行号),g(替换所有),p(打印原先内容),w file(写进文件)

    例子:

    sed 's/test/trial/' data4.txt
    sed 's/test/trial/2' data4.txt
    sed 's/test/trial/g' data4.txt
    sed -n 's/test/trial/p' data4.txt
    sed 's/test/trial/w test.txt' data5.txt

    然后,s指令,又可以指定地址,格式如下:

    [address]command 或者

    address {

      command1

      command2

      command3

    }

    或者直接用/pattern/command,匹配出需要的部分,再操作。

    使用例子:

    sed '2s/dog/cat/' data1.txt
    sed '2,3s/dog/cat/' data1.txt
    sed '2,$s/dog/cat/' data1.txt
    sed '/Samantha/s/bash/csh/' /etc/passwd
    
    sed '2{
    s/fox/elephant/
    s/dog/cat/
    }' data1.txt
    
    sed '3,${
    s/brown/green/
    s/lazy/active/
    }' data1.txt
    script--s

    1.3 删除行命令

    和s类似,直接例子吧

    sed '3d' data6.txt
    sed '2,3d' data6.txt
    sed '3,$d' test6.txt
    sed '/number 1/d' data6.txt
    删除行,请小心使用

    1.4 插入和附加文本

    插入命令(i),在指定行前加一个新行

    附加命令(a),在指定行后加一个新行

    sed '[address] command new line'

    例子:

    echo "Test Line 2" | sed 'i Test Line 1'
    echo "Test Line 2" | sed 'aTest Line 1'
    插入i,a命令,注意是

    1.5 修改行

    命令c类似于插入和附加,直接上例子吧

    sed '3cThis is a changed line of text.' data6.txt
    sed '/number 3/cThis is a changed line of text.' data6.txt
    修改行

    1.6 转换命令

    转换命令(y)是唯一可以处理单个字符的sed编辑器命令

    [address]y/inchars/outchars/

    例子:

    sed 'y/123/789/' data8.txt   data8中所有123换成789,一一对应
    y命令

    1.7 回顾打印

    • p命令打印文本
    • 等号(=)打印行号
    • l(小写L)列出行

    例子:

    echo "this is a test" | sed 'p'
    
    sed -n '/number 3/p' data6.txt
    sed -n '2,3p' data6.txt
    
    sed -n '/3/{
    p
    s/line/test/p
    }' data6.txt
    
    sed '=' data1.txt
    
    sed -n '/number 4/{
    =
    p
    }' data6.txt
    
    sed -n 'l' data9.txt
    打印例子

    1.8 sed处理文件

    写入文件用命令(w),[address]w filename

    读取数据用命令(r),[address]r filename

    例子:

    sed -n '/Browncoat/w Browncoats.txt' data11.txt
    
    sed '3r data12.txt' data6.txt
    sed '/number 2/r data12.txt' data6.txt
    sed '$r data12.txt' data6.txt
    写入和读取的例子

    二、gawk部分

    gawk提供了一种编程语言,可以做下面的事情:

    定义变量来保存数据: 

    • 定义变量来保存数据;
    • 使用算术和字符串操作符来处理数据;
    • 使用结构化编程概念(比如if-then语句和循环)来为数据处理增加处理逻辑
    • 通过提取数据文件中的数据元素,将其重新排列或格式化,生成格式化报告。

    2.1 gawk命令格式:

    gawk options program file

    可用选项:

    -F fs  指定行中划分数据字段的字段分隔符

    -f file  从指定的文件中读取程序

    -v var=value  定义gawk程序中的一个变量及其默认值

    -mf N  指定要处理的数据文件中的最大字段数

    -mr N  指定数据文件中的最大数据行数

    -W keyword  指定gawk的兼容模式或警告等级

    gawk会从STDIN接收数据,并处理然后打印到STDOUT。

    2.2 gawk数据字段变量

    • $0代表整个文本行
    • $1文本行中第一个数据字段
    • $2文本行中第二个数据字段
    • $n文本行中第n个数据字段

    2.3 使用多个命令

    只要在命令之间放个分号即可,组成多命令。

    echo "My name is Rich" | gawk '{$4="Christine"; print $0}'

    2.4 在处理数据前后运行脚本

    关键字:BEGIN、END

    gawk 'BEGIN {print "The data3 File Contents:"}
    {print $0}
    END {print "End of File"}' data3.txt
  • 相关阅读:
    Vue源码解读-构造函数
    在vue中使用async/await遇到的坑
    vue单页(spa)前端git工程拆分实践
    携带参数隐藏必要参数,瞬间改变浏览器地址
    解析Nuxt.js Vue服务端渲染摸索
    WebSocket的使用(基于VUE与SpringBoot)
    设计模式之桥接(bridge)模式
    设计模式之观察者模式
    设计模式之代理模式、适配器模式和外观模式
    设计模式之工厂模式
  • 原文地址:https://www.cnblogs.com/ch122633/p/10164750.html
Copyright © 2011-2022 走看看