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 '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的更多相关文章
- [shell编程]初识sed和gawk
一.sed编辑器 shell脚本最常见的用途就是处理文本文件,sed和gawk能够极大的简化需要进行的数据处理任务.sed编辑器是流编辑器,跟普通交互式文本编辑器(如vim)不同.流编辑器 ...
- 《Linux命令行与shell脚本编程大全》第十九章 初识sed和gawk
这两个工具能够极大简化需要进行的数据处理任务. 19.1 文本处理 能轻松实现自动格式化.插入.修改或删除文本元素的简单命令行编辑. sed和gawk就具备上述功能 19.1.1 sed编辑器 被称为 ...
- shell高级-----初识sed和gawk
sed编辑器 sed说明 sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增.删.改.查等操作,支持按行.按字段.按正则匹配文本内容,灵活方便,特别适合于大文件的编辑. 替换 ...
- linux shell学习记录
1.shell脚本开始以 #! /usr/bin 这个叫做Shebang 这个指定解释器的路径 2.shell 一些配置在~/.bashrc中,运行的历史shell命令在~/.bash_history ...
- shell学习记录002-知识点储备
1.echo "4*0.33" |bc #计算机功能的运用 [root@oc3408554812 shell]# ss=22; [root@oc3408554812 shel ...
- shell学习记录001-知识点储备
1.BASH(bourne again shell ) cmd1 ;cmd2等同于 cmd1 cmd2 2.echo music; 中的分号不被打印出,因为分号默认为命令定界符号 3.利用pgrep找 ...
- shell学习记录003-cat命令
cat 命令一般用于文件的查看 cat -s file #可以去除文件中多余的上下空行 cat -T file #Python编程中会用到的制表符会在该命令中体现出来 cat -n file ...
- Spring 学习记录8 初识XmlWebApplicationContext(2)
主题 接上文Spring 学习记录7 初识XmlWebApplicationContext refresh方法 refresh方法是定义在父类AbstractApplicationContext中的. ...
- 【Android】学习记录<1> -- 初识ffmpeg
工作需要用到ffmpeg来进行Android的软编码,对这玩意儿一点都不了解,做个学习记录先. FFmpeg:http://www.ffmpeg.org Fmpeg is the leading mu ...
随机推荐
- FutureTask的用法以及两种常用的使用场景
参考博客:https://blog.csdn.net/linchunquan/article/details/22382487 FutureTask可用于异步获取执行结果或取消执行任务的场景.通过传入 ...
- 抓包工具之—charles碎言碎语
一.Charles常见使用场景: 1.Charles是跨平台的抓包工具,支持Windows,mac或Linux平台: 2.获取请求信息.测试接口时,若接口文档中的参数不清楚或没有接口文档时,可以通过抓 ...
- Linux-档案权限概念
第一欄代表這個檔案的類型與權限(permission): 這個地方最需要注意了!仔細看的話,你應該可以發現這一欄其實共有十個字元:(圖5.2.1及圖5.2.2內的權限並無關係) 圖5.2.2.檔案的類 ...
- Java反序列化漏洞整理
Fastjson 反序列化 CVE-- Fastjson 利用版本范围为 Fastjson 及之前的版本 Struts2 S2-, S2-, S2-, S2-, S2-, S2-, S2-, S2-, ...
- auto_ptr与shared_ptr
注: 从c++11开始, auto_ptr已经被标记为弃用, 常见的替代品为shared_ptr shared_ptr的不同之处在于引用计数, 在复制(或赋值)时不会像auto_ptr那样直接转移所有 ...
- Vue路由注意事项
一.vue中路由的使用 1.定义组件 <template> <div class="hello"> <h1 @click="info&quo ...
- Windows DiskPart
win+r打开运行窗口,输入diskpart命令,按回车键或点击确定按钮即可打开如下所示界面: 输入help可以打印帮助信息 List Disk:显示本机的所有磁盘,以便正确操作目标磁盘 Select ...
- mooc-IDEA 收藏位置和文件--003
六.IntelliJ IDEA -收藏位置和文件(类/函数) 1.收藏自己喜欢的文件---代码 添加一个Favorites列表 定义名称 Help->Find Action... 选择Add t ...
- 常用js方法封装使用
// 冒泡排序 export function bubbleSort(arr) { let i = arr.length - 1; while (i > 0) { let maxIndex = ...
- HardFault_Handler
STM32程序一运行就进入HardFault_Handler,原因很可能是堆栈溢出 ]={}; // 我把程序中上面这句注释了就没事了 :进入HardFault_Handler也可能是数组越界引起的: ...