详解流编辑器 sed 和 编程语言 awk
一、流编辑器 sed
选项 |
-e |
连接多个编辑命令(直接在命令行模式上进行sed的操作) |
-f |
指定sed脚本文件名(将sed的操作写在一个文件里,用的时候 -f filename 就可以按照内容进行sed操作了) |
|
-n |
阻止输入行自动输出(只有经过sed处理过的行才显示出来,其他不显示) |
-r 使之支持扩展正则表达式
sed ‘3q’ test.in
sed ‘s/public/PUBLIC/’ test.in
sed -n ‘s/public/PUBLIC/p’ test.in
1、用分号分隔命令
sed 's/public/PUBLIC/;s/north/NORTH/' test.in
2、每个命令前放置-e
sed -e 's/public/PUBLIC/' -e 's/north/NORTH/' test.in
3、使用分行命令功能,在输入单引号后按return键就会出现多行提示符(>)
sed '
> s/public/PUBLIC/
> s/north/NORTH/' test.in
在脚本中使用sed命令:
test.sed文件内容如下:
s/public/PUBLIC/
s/north/NORTH/
sed -f test.sed test.in
sed_cmd中address的定位方式:
n |
表示第 n 行 |
|
$ |
表示最后一行 |
|
m,n |
表示从第 m 行到第 n 行 |
|
/pattern/ |
查询包含指定模式的行。如 /disk/、/[a-z]/ |
|
/pattern/,n |
表示从包含指定模式的行 到 第 n 行 |
|
n,/pattern/ |
表示从第 n 行 到 包含指定模式的行 |
|
/模式1/,/模式2/ |
表示从包含模式1 到 包含模式2的行 |
|
! |
反向选择,如 m,n!的结果与m,n 相反 |
sed'3q' test.in
p |
打印匹配行 |
s |
替换命令 |
= |
显示匹配行的行号 |
l |
显示指定行中所有字符 |
d |
删除匹配的行 |
r |
读文件 |
a\ |
在指定行后面追加文本 |
w |
写文件 |
i\ |
在指定行前面追加文本 |
n |
读取指定行的下面一行 |
c\ |
用新文本替换指定的行 |
q |
退出 sed |
awk 逐行扫描输入 (可以是文件或管道等),按给定的模式查找出匹配的行,然后对这些行执行awk 命令指定的操作。
可以使用重定向将awk的输出保存到文件中。
用法示 |
||
选项 |
-F |
指定输入记录字段的分隔符,默认使用环境变量IFS的值 |
-f |
从指定文件读取awk_script |
|
-v |
为awk设定变量 |
The IFS is a special shell variable.
You can change the value of IFS as per your requirments.
The Internal Field Separator (IFS) that is used for word splitting after expansion and to split lines into words with the read builtin command.
The default value is <space><tab><newline>. You can print it with the following command:
cat -etv <<<"$IFS"
IFS variable is commonly used with read command, parameter expansions and command substitution.
awk -F: '{ print $1 }' /etc/passwd
awk -F: '{ print $1, $3 }' /etc/passwd // 输出以空格连接
awk -F: '{ print $1 "|" $3 }' /etc/passwd // 输出以 | 连接
awk -F: '/root/{ print $1 "|" $3 }' /etc/passwd
awk -F: '/^root/' /etc/passwd // 开头是root 的行
(二)awk_script语法
注意BEGIN和END都是大写字母
awk'BEGIN {actions}
/pattern1/{actions}
......
/patternN/{actions}
END {actions}' input_file
其中BEGIN{actions}和END{actions}是可选的
取出ip 地址:
ifconfig |awk '/inetaddr/{ print $2 }' |awk -F: '{ print $2 }'
ifconfig |awk '/inetaddr/{ print $2 }' |awk -F: 'BEGIN { print "begin..."} { print $2 } END { print "end..."} '
(四)模式匹配
① 使用正则表达式:/rexp/,如/^A/、/A[0-9]*/
^ |
只匹配行首 ( 可以看成是行首的标志 ) |
$ |
只匹配行尾 ( 可以看成是行尾的标志 ) |
* |
一个单字符后紧跟 *,匹配 0个或多个此字符 |
[ ] |
匹配 [] 内的任意一个字符 ([^]反向匹配 ) |
\ |
用来屏蔽一个元字符的特殊含义 |
. |
匹配任意单个字符 |
str1|str2 |
匹配 str1 或 str2 |
+ |
匹配一个或多个前一字符 |
? |
匹配零个或一个前一字符 |
( ) |
字符组 |
(五)字段分隔符、重定向和管道
NR表示从awk开始执行后,按照记录分隔符读取的数据次数,默认的记录分隔符为换行符,因此默认的就是读取的数据行数,
NR可以理解为Number of Record的缩写。
在awk处理多个输入文件的时候,在处理完第一个文件后,NR并不会从1开始,而是继续累加,因此就出现了FNR,
每当处理一个新文件的时候,FNR就从1开始计数,FNR可以理解为File Number of Record。
NF表示目前的记录被分割的字段的数目,NF可以理解为Number of Field。
(六)更多awk
awk不仅是一个命令,它更是一个编程语言
变量
内部变量
awk ' {print NR,$0} ' #给文件加上行号
自定变量
函数
内置函数
自定义函数
awk '{ print sum($1,$2) } function sum(x,y) { s=x+y ; return s }' grade.txt
数组
awk 'BEGIN { print split("123#456",arr,"#") ; for (i in arr) { print arr[i] } }' // arr: 123 456
result="id 10 28 19 32"
data=(`echo $result | awk '{ for(i=2;i<=NF;i++) {print $i}}'`)
for task_id in ${data[@]}
do
done
参考:
《鸟哥的Linux私房菜基础篇》
《高级bash shell编程指南》
http://www.grymoire.com/
详解流编辑器 sed 和 编程语言 awk相关推荐
- linux shell中的流编辑器sed的使用
sed流编辑器 23.3.1 sed strem editor 流编辑器 sed编辑器是一行一行的处理文件内容的.正在处理的内容存放在模式空间(缓冲区)内,处理完成后按照选项的规定进行输出或文件的 ...
- MarkDown语法详解(Typora编辑器)
MarkDown语法详解(Typora编辑器) 即使再小的帆也能远航~ 目录 Mrakdown简介 Markdown标题 Markdown字体 各种线 引用 图片 超链接 列表 表格 代码 锚(mao ...
- 54. 流编辑器sed技术概览
1.流编辑器sed:不需要与人进行交互,修改文件是重点 sed工作流程 因此,sed不可将退出状态作为执行成功与否判断的依据. sed '' /etc/passwd 原封不动的逐行输出 sed 'd' ...
- shell脚本编程笔记(九)—— 初识流编辑器 sed
一. 流编辑器 sed编辑器被称作流编辑器(stream editor).在交互式文本编辑器中(比如vim),你可以用键盘命令来交互式地插入.删除或替换数据中的文本.流编辑器则基于预先提供的一组命令来 ...
- 详解CSDN-markdown编辑器使用教程(首次使用CSDN-markdown)
详解CSDN-markdown编辑器使用教程(首次使用CSDN-markdown) 原创:丶无殇 时间:2019-9-19 *仅基于原文教程加以注释* *注释以代码片方式(红字)* 字体颜色和大 ...
- shell脚本学习笔记 (流编辑器sed)
sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用非常普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出.sed不 ...
- 流编辑器sed和gawk
sed编辑器是一种流编辑器,区别于交互式vim编辑器,处理数据更快. 注意:sed编辑器并不会修改文本文件的数据.它只会将修改后的数据发送到STDOUT! sed 命令的格式如下:sed option ...
- linux sed 详解,linux的sed命令详解
一丶简介 sed是一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(patternspace),接着用sed命令处理缓冲区中的内容,处理 ...
- linux中替换命令详解,linux中sed命令字符串替换的用法详解
Linux系统中sed命令可以将字符串批量替换,省去了很多麻烦,下面由学习啦小编为大家整理了linux系统中sed命令字符串替换的用法详解,希望对大家有帮助! linux中sed命令字符串替换的用法详 ...
最新文章
- Python自动化开发学习6
- SLP是最近在BCH中引入的一个功能,它允许创建定制令牌。
- Spring资源加载器抽象和缺省实现 -- ResourceLoader + DefaultResourceLoader(摘)
- linux复制文件快捷键,Linux基础学习(基本命令和文件操作)
- 阿里云-AliRepo
- hbase查询_【从零单排HBase】HBase高性能查询揭秘
- (四)深入浅出TCPIP之TCP三次握手和四次挥手(下)的抓包分析
- C语言 float、double数据在内存中的存储方式
- Zookeeper Python
- 鸿蒙将至,安卓安否?
- 使用Android OpenGL ES 2.0绘图之一:搭建一个OpenGL ES环境
- swagger2常用注解
- 【temu】美国版数据采集API
- android 系统中静音后使得音量减键不能解除静音
- C#中读取XML(一种蛋蛋的忧桑)
- [ Ubuntu ] shell脚本编程丨日积月累丨1. 循环执行命令n次
- [风一样的创作]二次封装阿里云短信 验证码 发送短信 查询短信 编辑短信
- Linux下磁盘配额设置
- LeetCode | 575. Distribute Candies
- SDK全局热更新方案(全网唯一)
热门文章
- 20210416 word插入题录却有图片嵌入word
- 文件传输协议——FTP概述
- hashmap中的key是有序的么_关于HashMap中KEY的有序排列的反思和总结(对应TreeMap)
- python例子高考志愿填报系统入口_2019年四川高考志愿填报系统入口网址登录入口(最新)...
- Implement a customized pin code input control
- linux故障报错及解决方法
- v-for 遍历数组数字
- Failed to introspect annotated methods on class 异常
- ffmpeg win10 ffmpeg 采集数据
- Linux中的剪贴板--X11和selection