linux文本处理指令

相比于vim, sed和awk指令能够处理及其巨大的文件而不会发生崩溃的状况正则表达式

 

sed指令,行处理

sed 【选项】  '[n1 [,n2]] 行为'  【文件】
sed 【选项】  '/pattern/ 行为'  【文件】  #对正则匹配的行执行操做
sed 【选项】  'n1,+N 行为'  【文件】  #对n1行及其后的N行执行操做
sed 【选项】  -e '[n1 [,n2]] 行为' -e '[n1 [,n2]] 行为'  【文件】   #执行多个操做


选项:
-n  安静模式。只显示sed操做打印出的行(默认是显示 sed操做后结果文件的全部行 + sed操做打印出的行)。
-e  动做表达式,默认
-f  文件指定动做表达式
-r  使用扩展正则
-i  直接写入源文件,不输出屏幕

n1,n2  指定做用行号
每一个操做都必须用单引号括起

行为:
a [字符串]  追加到下行
i [字符串]  插入到上行
c [字符串]  替换行
d          删除行
p          打印行
s          替换

例子(如下示例只是打印结果, 若要写入文件则加 -i 选项):
sed '3,$d' filename  #删除3行至最后
sed '/patern/d' filename  #删除正则匹配patern行
sed '/patern1/,/patern2/s/aa/bb/' filename  #patern1匹配行至patern2匹配行间作aa->bb替换
sed '3a *** ###' filename  #3行后追加一行*** ###
sed '3a *** \
@@@'  #追加两行字符,必须 \ 结尾

sed '3,$c ***' filename  #替换3行至最后为***
sed -n '3,5p' filename  #打印第三行至第五行, -n选项必选
sed 'n1,n2s/from/to/g' filename  #指定行内查找替换, 没有指定行则全文替换

 

awk指令,列处理

awk 'pattern1 {动做1}  pattern2 {动做2} ...' filename    #当前行知足pattern条件则执行动做


pattern:
连续条件 pattern_a, pattern_b
逻辑运算 || && !
比较运算 >  <  >=  <=  ==  !=
BEGIN  读取行以前
END    读取行结束后
/reg/  正则表达式


内置变量:
NF  #当前行的字段数
NR  #当前是第几行
FS  #当前的分隔符,默认为 空格符 或 制表符

$0             #当前整行数据
$1, $2, ...    #第一,二 ... 字段


注意:
整个操做必须单引号括起
打印字符串值必须双引号括起
动做内的多个子动做可用;或者ENTER分离


例子:
awk '{print $1 "\t" $3 "\t line:" NR}' file  #打印1,3列及行号
awk 'BEGIN {FS=":"}  $3<10 {print $1}'  #初始化:为分隔符。若当前行第三列小于10则打印第一列
awk 'NR>=1 {out=$1+$3;printf "%10d %10d %10d \n",$1,$3,out}' #第一行后,打印第1、三列及求和值

 

diff指令,文件比较

 

diff 行比较指令vim

diff 【选项】 oldfile newfile

选项:
-i  #大小写不敏感
-b  #忽略不一样数目空白符的区别
-B  #忽略空白行的区别


##比较两个目录包含文件差别
diff 目录a 目录b

 

vimdiff 指令较diff更直观spa

vimdiff oldfile newfile

 

cmp 字节比较指令code

##显示第一处不一样字节
cmp file1 file

 

patch指令,文件补丁

 

制做补丁递归

diff -Naur oldfile newfile > patchfile
diff -Naur olddir  newdir  > patchfile

-N  缺失文件认定为空文件
-a  使用文本文件格式
-u  使用合并格式的diff
-r  递归

 

打补丁字符串

单个文件打补丁:
patch  【oldfile 【patchfile】】

目录打补丁:
进入旧目录所在的同级目录
patch -Np0 < patchfile
-N  明确指明为应用补丁
-p0  忽略0个层次的搜索路径, 由于已在旧目录同级目录。
-pN  表示当前目录下, 须要忽略补丁文件里目标文件路径信息的头N层,再进行当前目录下对目标文件的搜索

 

新文件补丁还原为旧文件awk

单个文件还原补丁:
patch -R 【patched_oldfile 【patchfile】】

目录还原补丁:
进入新目录所在的同级目录
patch -Rp0 < patchfile
-R  明确指定为还原补丁
-p0  忽略0个层次的搜索路径, 由于已在旧目录同级目录
相关文章
相关标签/搜索