鸟哥的Linux私房菜基础篇 第十二章 正则表达式与文件格式化处理

1. 正则的概念


正则表达式就是处理字串的方法,他是以行为单位来进行字串的处理行为, 正则表达式通过一些特殊符号的辅助,可以让使用者轻易的达到“搜寻/删除/取代”某特定字串的处理程序!


2. 基础正则表达式

    1. grep 工具

正则表达式也需要支持工具程序来辅助才行,以介绍grep为例。

grep 的基本用法:

grep [-A] [-B] [--color=auto] '搜寻字串' filename
	#auto的选项表示自动加上颜色
	# -A 表示after 
	# -B 表示befor
eg: 
dmesg |grep -n -A3 -B2 --color=auto  'qx'
dmesg | grep -n '[^a-z]oo'

字符汇总:

字符意义
^word以此开头
word$以此结尾
.代表一个字符,如: grep e.e file, //eae eve
\转义
*重复前一个字符: grep e* file // eeeee ee
[n1- n2]如[A-Z] 为大写字母
[^list]列出不要的字串和范围,[^A-Z]
{n,m}重复前一个字符的次数为n-m,如g{2,3},ggg
    1. sed工具

增加和删除:

sed ' 2,5d'  //删除2-5行
sed '2a drink tea'  //第2行下面增加一行
sed '2,5c  newcontent'   //以行为单位进行取代,将2-5行内容替换为一行新内容
sed 's/old/new/g'  //搜寻并取代。  

取代:

eg: 取出IP地址
ifconfig eth0|grep inet |sed 's/^.*inet //g' |sed 's/ netmask.*$//g'
. 表示任意字符,* 表示任意字符的序列, .*就表示一串任意字符

修改文件内容:
sed 的“ -i ”选项可以直接修改文件内容,如下:

 sed -i 's/\.$/\!/g' regular_express.txt 

3. 正则表达式的延伸

去除空白行和行首为#的:

grep -v -E '^$|^#' etcfile 
或者: egrep -v  '^$|^#' etcfile

4. 文件的格式化与相关处理

通过数据流重定向,配合printf,awk指令。

printf

例如我们要安照下面的版式进行输出:

Name    Chinese    English    Math    Average
DmTsai  80 			60 			92 		77.33
VBird   75 			55 			80 		70.00
Ken     60 			90			70 		73.33

printf ‘打印格式’ 实际内容
用法类似C语言的printf,

方面的几个特殊样式:
\a 警告声音输出
\b 倒退键(backspace)
\f 清除屏幕 (form feed)
\n 输出新的一行
\r 亦即 Enter 按键
\t 水平的 [tab] 按键
\v 垂直的 [tab] 按键
\xNN NN 为两位数的数字,可以转换数字成为字符。
关于 C 程序语言内,常见的变量格式
%ns 那个 n 是数字, s 代表 string ,亦即多少个字符;
%ni 那个 n 是数字, i 代表 integer ,亦即多少整数码数;
%N.nf 那个 n 与 N 都是数字, f 代表 floating (浮点),如果有小数码数,

例子:

printf ‘%s\t %s\t %s\t %s\t %s\t \n’ $(cat printf.txt)

awk ,数据处理工具

awk '{print $1 "\t" $3}'  file  //取出1,3行
$0表示取出整行的数据
NR表示该数据的行数
NF每一行的字段总数
FS目前的分割字符,默认是空格
awk 'BEGIN {FS=" "} $3<10 {print $1 "\t" $3}' file  //取出第三列小于10的
Name 1st 2nd 3th 
VBird 23000 24000 25000 
DMTsai 21000 20000 23000 
Bird2 43000 42000 41000 

使用awk输出为:
Name 1st 2nd 3th Total
VBird 23000 24000 25000 72000.00
DMTsai 21000 20000 23000 64000.00
Bird2 43000 42000 41000 126000.0

命令为:
cat pay.txt | \
> awk ' {if(NR==1) printf "%10s,%10s,%10s,%10s\n ",$1,$2,$3,$4,"total"} \
> NR>=2 {total=$2+$3+$4
> printf "%10s,%10s,%10s,%10s,%10.2f\n",$1,$2,$3,$4,$total}'

文件比较工具

  • diff
1 文件比较:
如,将passwd文件做如下操作:
cat passwd | sed -e '4d' -e '6c no six line' > passwd.nex
diff passwd passwd.nex
2 目录对比
 可以对比整个目录下的区别
  • cmp
    以字节为单位进行对比
  • patch
    结合diff,产生patch文件,从而,对旧文件进行更新,或者对新文件进行恢复:
diff -Naur passwd.old  passwd.new > passwd.patch
patch -p0 <passwd.patch     更新
patch -R -p0 <passwd.patch   恢复
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值