您的位置:首页 > 运维架构 > Shell

linux --> shell --> sed,awk,diff,patch

2017-12-30 00:04 393 查看
linux下的shell命令学习笔记008

# --------------------------------

# sed
工具

#-n (安静模式)仅仅sed特殊处理的那一行才显示

#-r
动作支持扩展正则表达式(默认是基础正则表达式)

#-i
直接修改文件内容,而不是由屏幕输出

# 动作说明:直接举例说明吧

cat -n main.c
| sed
 -n
'5,12p'
#将main.c中的5-12行输出

cat -n main.c
| sed
 '5,12d' | less
#将main.c中的5-12行删除

nl main.c | sed '2a #include<stdlib.h>'
#在mian.c第2行之后添加#incude...

# 以上例子仅仅打印在屏幕上,并没有写入文件

# 下面这个是直接修改文件,注意别直接用来修改系统文件,太危险了

sed '1a #include<stdlib.h>' -i main.c
#实际写入了文件

 

# 动作介绍:

# a
追加

# c
替换  nl main.c | sed '3c //Hello world!'

# d
删除

# i
插入

# p
打印

# s
替换,直接进行替换工作,并且可以配合正则表达式

# 1,20s/old/new/h
#该命令可以类比rename的操作

 

# --------------------------------

# printf
格式化输出

printf '%10s\t%10s\t%10s\n' $(cat 1.txt)

# printf 不是管道命令,因此需要$(cat 1.txt)

printf 'str = \x41\x30\n'

# 直接输出字符: str = A0回车

printf 'num=%d\n' 125

# 输出:num=125

# 我觉得printf可以类比c中的printf(当然并非完全一样,但可类比)

 

# --------------------------------

# awk
常用于将行分段处理

# sed
常用语行处理

#

# 简单解释该命令:NR是个变量,表示awk所处理的是第几行的数据

last -| awk '{print
"line_cnt=" NR "\t" $1  "\t" $3 }'

# 看下面的命令,理解吗?(注意逻辑判断的用法)

ls -al| awk '$5 > 1024
{print $1 "\t" $9}'

# awk特殊的地方,变量不必使用$

 

# --------------------------------

# diff
常用于同一个文件的新旧版本比较

# [特点]以行进行比较

# 举例:

cat 1.txt
> 2.txt

sed -i
'4,12d' 2.txt

sed -i
'1a wjf' 2.txt

sed -i
'7c AAABBBCCC' 2.txt

diff 1.txt
2.txt

# --------------------------------

# cmp

# [特点]以字节进行比较

# 相对与diff而言,用的较少

# --------------------------------

# patch
该命令和diff密不可分

# ---> 升级

# 举例:

diff -Naur
1.txt
2.txt
> txt.patch

cat txt.patch
| grep
 '^[+-]*'

# 我的理解:

# ---
代表旧文件

# +++
代表新文件

# +
代表新增

# -
代表删除

 

#用补丁将旧文件1.txt更新

patch -p0
< txt.patch

#用补丁对更新后的1.txt进行还原

patch -R -p0
< txt.patch

 

#patch 详解解释:

patch -pN
< patchfile

patch -R -pN
< patchfile

#参数说明:

#-p
后面紧跟的N表示取消几层目录的含义

#-R
代表还原,将更新后的文件还原为旧版本
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: