Linux 常用命令总结~正则表达式与文件格式化处理

这里只是列出一些常用的命令及解释
正则表达式使用、grep 扩展用法、sed工具使用、printf打印命令使用、awk用法、diff用法、cmp用法等。

使用正则表达式之前的语系设置

使用正则表达式要注意语系的影响。
	LANG=C(常用,一般设置)
	LANG=zh_CN

# export LANG=C 
设置语系

一些常见的特殊符号

[:alnum:]		代表英文大小写字符集数字
[:alpha:]		代表任何英文大小写字符
[:upper:]		代表大写字符
[:lower:]		代表小写字符
[:digit:]		代表数字

grep用法

grep [-A] [-B] [--color=auto] '搜寻字符串' filename
	-A:后面可加数字,为after的意思,除了列出该行外,后续的n行也列出来
	-B:后面可加数字,为before的意思,除了列出该行外,前面的n行业列出来
	--color=auto		可将正确的那个选取数据列出颜色

grep 在数据中查找一个字符串时,是以整行为单位来进行数据的选取的。

eg: 

# dmesg|grep -n -A3 -B2 --color=auto 'eth'		
其中dmesg表示列出内核信息,再以grep找出内含eth的那行

grep 可以使用--color=auto来将关键字显示颜色,但是每次都加又很麻烦。可以在~/.bashrc内加上这行:alias grep='grep --color=auto',
然后用“ source ~/.bashrc” 来立即生效。这样之后每次执行它都会自动帮你加上颜色显示。

基础正则表达式用法

RE字符 意义
^word 待查找字符串在行首
word$ 待查找字符串在行尾
. 代表一定有一个任意字符的字符
\ 转义字符,将特殊符号的特殊意义去除
* 重复0个到无穷多个的前一个字符
[ list] 从字符集合的字符中找出想要选取的字符。例如[afl]代表 a 或 f 或 l 的意思
[n1-n2] 从字符集合的RE字符中找出想要选取的字符范围。例如所有大写字符则为[A-Z]
[^list] 从字符集合的RE字符里面找出不要的字符串或范围。例如我不要大写字符,则为[^A-Z]
\{n,m\} 连续n到m个的前一个RE字符,若为\{n\}则是连续n个的前一个RE字符,若为\{n,\}则是连续n个以上的前一个RE字符
# grep -n '^the' regular_express.txt		表示行首是the开头的

# grep -n '\.$' regular_express.txt		表示行尾结束为小数点的那一行

# grep -n 'g..d' regular_express.txt 		表示找到gd之前有两个字符的行

# grep -n 'ooo*' regular_express.txt	表示找到两个o以上的字符串

# grep -n 't[ae]st' regular_express.txt		表示找tast或者test的行

# grep -n '[0-9]' regular_express.txt	表示取得有数字的行

# grep -n '[^a-z]oo' regular_express.txt 	表示oo前面不要有小写字符的行

# grep -n 'o\{2,3\}' regular_express.txt		表示2个o或者3个o的字符串

特别强调,正则表达式的特殊字符与一般在命令行输入命令的“通配符”并不相同。

sed工具
sed本身也是一个管道命令,可以将数据进行替换、删除、新增、选取特定行等功能。

sed [-nefr] 动作
参数
	-n : 使用安静模式。只有经过sed特殊处理的那一行才会被列出来(避免重复显示)
	-e : 直接在命令行模式上进行sed的动作编辑。当有两个动作时使用。
	-f : 直接将sed的动作写在一个文件内
	-r : sed 的动作支持的是扩展型正则表达式的语法(默认的是基础正则表达式语法)
	-i : 直接修改读取的文件内容,而不是由屏幕输出。
动作说明:	[n1][,n2]]function
n1 , n2 :不见得会存在,一般代表选择进行动作的行数,举例来说,如果我的动作时需要在10到20行之间进行的,则“ 10,20[动作行为]”

function有下面这些参数:
a : 新增 , a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行);
c : 替换 , c 的后面可以接字符串,这些字符串可以替换n1,n2之间的行
d : 删除 , 因为是删除,所以d后面通常不接任何参数
i : 插入 , i 的后面可以接字符串,而这些字符串会在新的一行出现(目前行的上一行)
p : 打印 , 也就是将某个选择的数据打印出来,通常 p 会与参数sed -n 一起运行
s : 替换 , 可以直接进行替换的工作。通常这个s的动作可以搭配正则表达式! 例如 1,20s/old/new/g 就是
# nl /etc/passwd | sed '2,5d'	
将/etc/passwd的内容列出并打印行号,同时,将2-5行删除

# nl /etc/passwd | sed '2a drink tea'
在第二行后加上“drink tea”字样

# nl /etc/passwd | sed '2a Drink tea or .....\
> drink beer ? '
在第二行后面加两行字,例如“Drink tea or ......” 与 “drink beer ?”

当需要新增好几行时,每一行之间必须用反斜杠“\”来进行新行的增加。

# nl /etc/passwd | sed '2,5c No 2-5 number'
将2-5行的内容替换为“No 2-5 number”

# nl /etc/passwd | sed -n '5,7p'
仅列出/etc/passwd 文件内的第5-7行
这里加上-n 是为了避免输出其他的很多的,这里只输出处理的5-7行


sed 's/要被替换的字符串/新的字符串/g'

# /sbin/ifconfig eth0 | grep 'inet addr' | \
> sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
取ip

# sed -i 's/\.$/\!/g' regular_express.txt 
利用sed 将regular_express.txt内每一行结尾“.”的换成“!”

由于-i 会直接修改文件内容,属于危险操作。但是如果你有一个100万行的文件,你要在第100行加某些文字,就可以使用sed,(注意这里使用vim的话,会很麻烦的)


猜你喜欢

转载自blog.csdn.net/Vincent_yuan1991/article/details/87837410