sed与awk
来源:互联网 发布:监控无网络视频怎么办 编辑:程序博客网 时间:2024/06/05 18:21
sed命令(注意转义是\,sed中大多数用的是/.../)
一简介:sed是一种流式编辑器,自动编辑一个或者多个文件,简化对文件的反复操作,是文本处理中非常重要的工具,一般和正则表达式配合使用,处理时,把当前处理的行存储到行缓冲区中,称为“模式空间”,接着sed命令处理模式空间的内容并将其结果打印到屏幕,继续处理下一行不断重复,直到文件末尾,文件的内容并不改变,除非使用重定向存储输出
二命令格式
sed [option] 'command' file
三选项:
[option]
-i;表示改变源文件
-n;取消默认输出;
-e:多项编辑
-f:指定sed脚本的文件名;
命令:
a\:i在当前行后添加一行或多行,多行时除最后一行外,每行末尾需要“\”续行;
c\:用此符号后的新文本替换当前行中的文本,多行时除最后一行外,每行末尾需要“\”续行;
i\:在当前行之前插入文本;多行时除最后一行外,每行末尾需要“\”续行;
I:列出非打印字符;
p:打印行;
q:结束或退出;
r:从文件中读取输入行;
w:将所选的行写入到文件中;
!:对所选行的以外所有行应用命令;
s:用一个字符串替换另一个;(&对前面字符串的简写)
sed元字符集
^:行开始 放到[ ]中表示括号中的内容除外;
$:行结束;
\< \>:单词的开始或结尾; #/\<love/p :匹配以love开头的单词的行
.:匹配任意一个非换行符字符
*:匹配0个或多个字符;
[ ]:匹配指定范围内的字符;
[^]:匹配不在指定范围内的字符;
&:保存搜索字符用来替换其他字符; ’s/love/**love**/‘ 所有love变为**love**
\(..\):匹配字串; 如:sed -n 's/\(love\) addr/\1rs/p'
x\{m\}:重复字符x m次;
x\{3,\}:重复字符至少3次;
x\{,5\}:重复字符至多5次;(有时候用不了)
x\{3,7\}:重复字符至少3到7次;
/pattern/p:打印匹配pattern的行;(待处理文件的内容及其处理结果)
/pattern/d:删除匹配pattern的行;
/pattern/s/pattern1/pattern2/p:查找匹配pattern的行,将该行第一个匹配字符串pattern1的字符串替换为pattern2;
/pattern/s/pattern1/pattern2/pg:查找匹配pattern的行,将该行所有匹配字符串pattern1的字符串替换为pattern2;
定址:用于决定对于哪些行进行编辑,地址形式可以是数字,正则表达式或者二者的结合;
eg:
sed -n '2p' file #打印第二行;
sed '100,300d ' file #删除第100行到第300行之间的内容
sed '/start/,/end/' file #删除包含'start'行和‘end’行之间的行;
模式空间与保持空间;
h:模式空间的内容复制到暂存缓冲区;
H:追加
g:暂存缓冲区的内容复制到模式空间;
G:追加
x:交换暂存缓冲区和模式空间的内容;给每行结尾添加一个空行:
[lianjiao@localhost 6_29_Regular]$ sed '1!G;h;$!d' file654321
实现tac功能
[lianjiao@localhost 6_29_Regular]$ sed '1!G;h;$!d' file654321
将以hello开头的行追加到末尾:
显示file1内容
[lianjiao@localhost 7_3_sed]$ cat file1hello word1111hellokitty22223333 hello第一种方法:
[lianjiao@localhost 7_3_sed]$ sed '/^hello/H;$G' file1hello word1111hellokitty22223333 hellohello wordhellokitty使用-e多次处理
[lianjiao@localhost 7_3_sed]$ sed -e '/^hello/H' -e '$G' file1hello word1111hellokitty22223333 hellohello wordhellokitty注意追加之前会有空行;是因为要将模式空间中符合条件的行追加到保持空间,保持空间默认会有/n存在;再次将保持空间中的内容追加到模式空间就会讲/n也追加进入;
比如题目要求在每行之后加上空行
[lianjiao@localhost 7_3_sed]$ sed 'G' file1hello word1111hellokitty22223333 hello
行列转换:
[lianjiao@localhost 7_3_sed]$ seq 10 | tr '\n' ' '1 2 3 4 5 6 7 8 9 10 [lianjiao@localhost 7_3_sed]$ [lianjiao@localhost 7_3_sed]$ seq 10 | sed ':a;N;$!ba;s/\n/ /g'1 2 3 4 5 6 7 8 9 10[lianjiao@localhost 7_3_sed]$ seq 10 | sed ':a;N;$!ba;s/\n/,/g'1,2,3,4,5,6,7,8,9,10[lianjiao@localhost 7_3_sed]$ seq 10 | sed ':a;N;$!ba;s/\n/''/g'12345678910[lianjiao@localhost 7_3_sed]$ seq 10 | sed ':a;N;$!ba;s/\n//g'12345678910[lianjiao@localhost 7_3_sed]$ seq 10 | sed ':a;N;$!ba;s/\n//g'12345678910注意可以替换为//,/‘’/,不可以替换为/‘ ’/
打印奇数行:
[lianjiao@localhost 7_3_sed]$ seq 10 | sed -n 'p;n' 13579
打印偶数行:
[lianjiao@localhost 7_3_sed]$ seq 10 | sed -n 'n;p' 246810
AWK
awk比sed的功能更强大,主要体现在awk不仅可以行处理文件,而且可以列处理文件;
一 格式:awk '/pattern(rgx)/{a}' file
awk 'condition{a}' file
二 awk调用方式:1 命令行 awk [-F filed-seperator] 'commend' file
2 脚本 增加执行权限 -> #!/usr/bin/awk -f -> ./test.awk file
awk -f test.awk file
三:注意问题
1记录:行 域:列
2 $1(第一列(域)); $n(第n域);$0(所有列);$NF(倒数第一列);$(NF-1):(倒数第二列)3.awk工作流程是这样,先执行BEGIN,然后读取文件,读到\n划分的一条记录,按照域分割符将记录划分为不同的域,在进行域填充,直到所有记录都读完执行END操作;
三 例子
编写file
productA 20productB 30productC 80productD 60productE 20productF 40
提取第二域:
awk '/^productC/{print $2}' file
将第二域中>50打印YES;<50打印NO;
[lianjiao@localhost 7_3_sed]$ awk '$2>50{print $0,"YES";}$2<=50{print $0,"NO"}' fileproductA 50 NOproductB 70 YESproductC 30 NOproductD 80 YESproductE 50 NOproductF 50 NO[lianjiao@localhost 7_3_sed]$ awk '$2>50{printf("%s,%s\n",$0,"YES")}$2<=50{printf("%s,%s\n",$0,"NO")}' file
productA 50,NOproductB 70,YESproductC 30,NOproductD 80,YESproductE 50,NOproductF 50,NO
1+.....100[lianjiao@localhost 7_3_sed]$ seq 100 | awk 'BEGIN{i=0}{i++;sum+=i}END{print sum}'5050
两个重要选项;OFS和FSOFS:输出域分割符;
FS:设置域分割;
[lianjiao@localhost 7_3_sed]$ awk 'BEGIN{FS="t";OFS=";"}{print $0}' fileproductA 50productB 70productC 30productD 80productE 50productF 50注意$0会全部输出;设置分割符并不会影响结果,要想输出理想结果,$1,$2[lianjiao@localhost 7_3_sed]$ awk 'BEGIN{FS="t";OFS=";"}{print $1,$2}' fileproduc;A 50produc;B 70produc;C 30produc;D 80produc;E 50produc;F 50
- awk与sed
- sed与awk
- [linux]sed与awk
- awk与sed
- sed与awk
- Sed与AWK入门教程之Sed篇
- Sed与AWK入门教程之Sed篇
- Sed与AWK入门教程之Sed篇
- Sed与AWK入门教程之Sed篇
- sed与awk读书笔记[sed篇]
- AWK SED 与 LINUX常用命令
- SED与AWK学习笔记
- sed与awk常用功能
- sed与awk技巧备忘
- SED与AWK学习笔记
- SED与AWK学习笔记
- sed与awk常用功能
- SED与AWK学习笔记
- python爬虫(五)图片下载爬虫
- mybatis中#和$的区别
- Latex 表格制作工具
- android.app.Fragment
- -Dmaven.multiModuleProjectDirectory system propery is not set.
- sed与awk
- Git使用详细教程
- 二叉搜索树笔记
- C++__继承和派生
- Java多线程(一)、多线程的基本概念和使用
- 54-58day 美团HD(美团的界面,大众点评的API)
- bootstrap初步
- python find() rfind() index() rindex() count() replace()...字符串的各种使用
- c#快速入门-main函数