开发者社区> 技术小胖子> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Linux的文本编辑diff & cut & echo & sed & awk & grep

简介:
+关注继续查看

一、文本文件比较命令diff

1.diff命令的功能
Linux中diff命令的功能为逐行比较两个文本文件,列出其不同之处。它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序。

格式

diff  [num1,num2][a|c|d][num3,num4]
a        添加(a,代表addition)

c        改变(c,代表change)

d        删除(d,代表deletion)

num1,num3    第一个文件的内容
num3,num4    第二个文件的内容


创建file和file1文件


比较file和file1,显示2d1,表示第二行删除123变成第二个

比较file1和file,显示2a1,表示第一行增加123变成第二个

wKiom1mcD3Hg-ojBAABn9IBocE8697.png


创建file和file1文件


比较file和file1,显示2c2,表示第二行有变化,第一个删除123,第二个删除124后一样

比较file1和file,显示2c2,表示第二行有变化,第一个删除124,第二个删除123后一样

wKiom1mcD3HDMYcwAAB1Nj1QEJo943.png


2.diff生成patch文件

wKioL1mcD2nDbVz_AAArkh1DCkQ056.png


diff -u file file1 > file.path     file与file1的差别导入到file.path

patch  file file.path               不备份源文件
patch -b file file.path           -b表示备份原文件为file.orig

wKioL1mcHpmxGcD5AAC_cAzbYeo786.png


二.grep(关键字: 截取)


1.作用

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

 

2.格式

grep [options]

 

3.主要参数

[options]主要参数:

-c:只输出匹配行的计数。

-I:不区分大 小写(只适用于单字符)

-h:查询多文件时不显示文件名。

-l:查询多文件时只输出包含匹配字符的文件名。

-n:显示匹配行及 行号。

-s:不显示不存在或无匹配文本的错误信息。

-v:显示不包含匹配文本的所有行。

pattern正则表达式主要参数:

\: 忽略正则表达式中特殊字符的原有含义。

^:匹配正则表达式的开始行。

$: 匹配正则表达式的结束行。

\<:从匹配正则表达 式的行开始。

\>:到匹配正则表达式的行结束。

[ ]:单个字符,如[A]A符合要求 。

[ - ]:范围,如[A-Z],即ABC一直到Z都符合要求 。

。:所有的单个字符。

:有字符,长度可以为0

  

grep -n  显示行号

wKiom1mcHqKx_1qCAABobOu1wpY330.png


grep -n3 显示上下3行

wKioL1mcHpqi3PYLAACnYjK_PKk504.png


grep -A3 显示下面3行

wKiom1mcHqPhWDuOAABl3oVG4gA402.png


grep -B3 显示上面3行

wKioL1mcHpvQssEZAABjdza14Bg781.png


grep -i 忽略大小写

wKiom1mcHqSi2VNSAABm3CYzTwg737.png


grep -v 取反

wKioL1mcHpzgj6KfAABuAGX4VQA933.png

grep -E 多重过滤

wKiom1mcHqXQd8giAABA7QxMaZs215.png


grep ^root 以root开头

wKiom1mcKi_ThlYzAAAs3fNpfaI622.png


grep root$ 以root结尾

wKiom1mcKnHxBJR1AAAdeLwDKMI957.png


grep "\<root" 以root开始

wKiom1mcK16DjH5-AABOyhlFevQ428.png

grep "root\>" 以root结束

wKioL1mcK1aDR4kbAABOzbrmWWM416.png


grep "\<root\>" 以root开始以root结束 忽略大小写

wKioL1mcHp2jnfY6AABcZkYYW_0757.png


三.cut

cut在文件中负责剪切数据用的。cut是以每一行为一个处理对象的,这种机制和sed是一样的。

剪切依据

-d 指定分割符号

cut命令主要是接受三个定位方法:


1.字节(bytes),用选项-b

wKiom1mcMDWjRbp6AAB6WmYBNw8208.png


2.字符(characters),用选项-c

wKiom1mcMKPQFLIzAABNhiaEsB8985.png


3.域(fields),用选项-f

wKioL1mcMO3g2zZVAABg4MO9lAo176.png


四.seq顺序

seq 开始 间隔 结尾

wKioL1mdjpuyjslpAABhyY_f10o719.png


五.echo

echo是一种最常用的与广泛使用的内置于Linux的bash和C shell的命令,通常用在脚本语言和批处理文件中来在标准输出或者文件中显示一行文本或者字符串。

\a 发出警告声;

\b 删除前一个字符;

\c 最后不加上换行符号;

\f 换行但光标仍旧停留在原来的位置;

\n 换行且光标移至行首;

\r 光标移至行首,但不换行;

\t 插入tab;

\v 与\f相同;

\\ 插入\字符;

\nnn 插入nnn(八进制)所代表的ASCII字符;


echo -n   换行
echo -e   
echo -e "\r    \r"


六.awk(关键字:分析&处理) 

一行一行的分析处理 awk '条件类型1{动作1}条件类型2{动作2}' filename, awk 也可以读取来自前一个指令的 standard input
   相对于sed常常用于一整行处理, awk则比较倾向于一行当中分成数个"字段"(区域)来处理, 默认的分隔符是空格键或tab键
   例如:
   last -n 5 | awk '{print $1 "\t" $3}'  这里大括号内$1"\t"$3 之间不加空格也可以, 不过最好还是加上个空格, 另外注意"\t"是有双引号的, 因为本身这些内容都在单引号内
   $0 代表整行 $1代表第一个区域, 依此类推
   awk的处理流程是:
   1. 读第一行, 将第一行资料填入变量 $0, $1... 等变量中
   2. 依据条件限制, 执行动作
   3. 接下来执行下一行
   所以, AWK一次处理是一行, 而一次中处理的最小单位是一个区域
   另外还有3个变量, NF: 每一行处理的字段数, NR 目前处理到第几行 FS 目前的分隔符
   逻辑判断 > < >= <= == !== , 赋值直接使用=
   cat /etc/passwd | awk '{FS=":"} $3<10 {print $1 "\t" $3}' 首先定义分隔符为:, 然后判断, 注意看, 判断没有写在{}中, 然后执行动作, FS=":"这是一个动作, 赋值动作, 不是一个判断, 所以不写在{}中
   BEGIN END , 给程序员一个初始化和收尾的工作, BEGIN之后列出的操作在{}内将在awk开始扫描输入之前执行, 而END{}内的操作, 将在扫描完输入文件后执行.
   awk '/test/ {print NR}' abc 将带有test的行的行号打印出来, 注意//之间可以使用正则表达式
   awk {}内, 可以使用 if else ,for(i=0;i<10;i++), i=1 while(i<NF)
   可见, awk的很多用法都等同于C语言,
 比如"\t" 分隔符, print的格式, if, while, for 等等

awk 是相当复杂的工具, 真正使用时, 再补充吧. (有关工具的picture)


TEST="#################################"
awk -F 分隔符 -v TEST=$TEST  'BEGIN {print TEST} {print $2} END{print TEST}' passwd
awk -F ":" -v TEST=$TEST 'BEGIN {print TEST ":"} {print $2} END{print TEST}' passwd

wKiom1mcNhWRfuIIAABVQiPmxOE054.png


七.sed(关键字: 编辑) 

1. Sed简介  

sed 是一种在线编辑器,它一次处理一行内容。处理时,把当 前处理的行存储在临时缓冲区中,称为模式空间pattern space),接着用sed命 令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输 出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。  

  

2. 定址  

可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如13表示123行,美元符号($)表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定。  

  

3. Sed命令格式  

调用sed命令有两种形式:  

sed [options] 'command' file(s)  

sed [options] -f scriptfile file(s)  

  

4.常见的Sed命令  

a  在当前行后面加入一行文本。  

label 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。  

c  用新的文本改变本行的文本。  

d  从模板块(Pattern space)位置删除行。  

D  删除模板块的第一行。  

i  在当前行上面插入文本。  

h  拷贝模板块的内容到内存中的缓冲区。  

H  追加模板块的内容到内存中的缓冲区  

g  获得内存缓冲区的内容,并替代当前模板块中的文本。  

G  获得内存缓冲区的内容,并追加到当前模板块文本的后面。  

l  列表不能打印字符的清单。  

n  读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。  

N  追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。  

p  打印模板块的行。  

P(大写)  打印模板块的第一行。  

q  退出Sed。  

r file  从file中读行。  

t label  if分支,从最后一行开始,条件一旦满足或者Tt命令,将导致分支到带有标号的命令处,或者到脚本的末尾。  

T label 错误分支,从最后一行开始,一旦发生错误或者Tt命令,将导致分支到带有标号的命令处,或者到脚本的末尾。  

w file  写并追加模板块到file末尾。  

W file  写并追加模板块的第一行到file末尾。  

!  表示后面的命令对所有没有被选定的行发生作用。  

s/re/string  用string替换正则表达式re。  

=  打印当前行号码。  

#  把注释扩展到下一个换行符以前。  


以下的是替换标记  

  

g表示行内全面替换。  

p表示打印行。  

w表示把行写入一个文件。  

x表示互换模板块中的文本和缓冲区中的文本。  

y表示把一个字符翻译为另外的字符(但是不用于正则表达式)  





sed 's/bin/westos/g' passwd

wKioL1mcQurS1uqyAABlUaZAzhI356.png

sed '1,5s/westos/redhat/g' passwd

wKioL1mcQuuiWrlHAABlVJf6B2s965.png


sed '/lp/,/shutdown/s/sbin/westos/g' passwd
sed -e 's/sbin/westos' -e 's/nologin/redhat' passwd
sed -5d passwd
sed -5p passwd
sed -n 5p passwd
vim file
s/sbin/westos/g
s/nologin/lee/g

sed -f file passwd 







      本文转自一百个小排 51CTO博客,原文链接:http://blog.51cto.com/anfishr/1958151,如需转载请自行联系原作者



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Linux中的Diff和Patch
本文主要记录两个命令的学习情况:diff 和 patch。diff 和 patch 是一对工具,使用这对工具可以获取更新文件与历史文件的差异,并将更新应用到历史文件上。在数学上说,diff就是对两个集合的差运算,patch就是对两个集合的和运算。
1022 0
Linux diff patch
/***************************************************************************** * Linux diff patch * 声明: * 经常需要给代码打补丁,但是发现自己不会打补丁,经常看着补丁改代码,效率 * 那是一个低啊,不会就学学呗,反正patch有-R回退,不怕出错。
837 0
21114
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载