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 'a\Test Line 1'

插入i,a命令,注意是\

1.5 修改行

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

sed '3c\This is a changed line of text.' data6.txt
sed '/number 3/c\This 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 $}
END {print "End of File"}' data3.txt

shell学习记录----初识sed和gawk的更多相关文章

  1. [shell编程]初识sed和gawk

    一.sed编辑器       shell脚本最常见的用途就是处理文本文件,sed和gawk能够极大的简化需要进行的数据处理任务.sed编辑器是流编辑器,跟普通交互式文本编辑器(如vim)不同.流编辑器 ...

  2. 《Linux命令行与shell脚本编程大全》第十九章 初识sed和gawk

    这两个工具能够极大简化需要进行的数据处理任务. 19.1 文本处理 能轻松实现自动格式化.插入.修改或删除文本元素的简单命令行编辑. sed和gawk就具备上述功能 19.1.1 sed编辑器 被称为 ...

  3. shell高级-----初识sed和gawk

    sed编辑器 sed说明 sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增.删.改.查等操作,支持按行.按字段.按正则匹配文本内容,灵活方便,特别适合于大文件的编辑. 替换 ...

  4. linux shell学习记录

    1.shell脚本开始以 #! /usr/bin 这个叫做Shebang 这个指定解释器的路径 2.shell 一些配置在~/.bashrc中,运行的历史shell命令在~/.bash_history ...

  5. shell学习记录002-知识点储备

    1.echo "4*0.33" |bc    #计算机功能的运用 [root@oc3408554812 shell]# ss=22; [root@oc3408554812 shel ...

  6. shell学习记录001-知识点储备

    1.BASH(bourne again shell ) cmd1 ;cmd2等同于 cmd1 cmd2 2.echo music; 中的分号不被打印出,因为分号默认为命令定界符号 3.利用pgrep找 ...

  7. shell学习记录003-cat命令

    cat 命令一般用于文件的查看 cat -s file   #可以去除文件中多余的上下空行 cat -T file   #Python编程中会用到的制表符会在该命令中体现出来 cat -n file  ...

  8. Spring 学习记录8 初识XmlWebApplicationContext(2)

    主题 接上文Spring 学习记录7 初识XmlWebApplicationContext refresh方法 refresh方法是定义在父类AbstractApplicationContext中的. ...

  9. 【Android】学习记录<1> -- 初识ffmpeg

    工作需要用到ffmpeg来进行Android的软编码,对这玩意儿一点都不了解,做个学习记录先. FFmpeg:http://www.ffmpeg.org Fmpeg is the leading mu ...

随机推荐

  1. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_08 Map集合_4_Map集合遍历键找值方式

    键找值的方式 增强for 增强for的简化方式

  2. 16/7/7_PHP-Static静态关键字

    Static静态关键字 静态属性与方法可以在不实例化类的情况下调用,直接使用类名::方法名的方式进行调用.静态属性不允许对象使用->操作符调用. class Car { private stat ...

  3. netcore2.1 在后台运行一个任务

    在 ASP.NET Core 2.1中, 提供了一个名为BackgroundService的类,在 Microsoft.Extensions.Hosting命名空间中,其代码为 namespace M ...

  4. ArrayList,linkedList vecator的实现和区别

    1.线程安全问题. ArrayList 和 linkedList 线程是不安全的,而vecator是线程安全的. 因为ArrayList 和 linkedList 是线程不同步的,vecator是同步 ...

  5. Java学习day10-面向对象特征之一:封装和隐藏

    一.包package和引用import 1.关键字package package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包(若缺省该语句,则指定为无名包).包的存在是为了区别同名 ...

  6. [2019杭电多校第六场][hdu6638]Snowy Smile(维护区间最大子段和)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6638 题意为在一个平面上任意选择一个长方形,使得长方形内点权和最大. 因为长方形可以任意选择,所以上下 ...

  7. [2019杭电多校第一场][hdu6578]Blank(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6578 计数问题想到dp不过分吧... dp[i][j][k][w]为第1-i位置中4个数最后一次出现的 ...

  8. Vue组件定义

    简介 组件是可复用的 Vue 实例. 本质上是一个对象,该对象包含data.computed.watch.methods.filters以及生命周期钩子等成员属性. 组件结构: { data(){ r ...

  9. OtterTune配置记录

    0. 准备两台Ubuntu 18.04的虚拟机,安装mysql(供server-side存储调优数据用)和postgresql(供client-side存储业务数据用,这里以PostgreSQL为例. ...

  10. Java Collection总结

    继续啊啊啊啊啊啊 7. collection基本用法 Collection: add(obj) remove(obj) size() isEmpty() contains(obj) iterator( ...