linux基本命令2
正则表达式、grep、sed、awk、cut
0、一些简单的知识
管道 |
linux支持管道,即把前面的命令执行的结果通过管道传输给后面的命令
命令1 | 命令2 | 命令3 …
重定向 > 、>>、<、<<
a、> 将命令结果输出到文件中,如果存在文件则覆盖其中内容。
b、>> 将命令结果输出到文件中,如果存在文件则在末尾添加内容。
c、< 输入重定向 例如常见的 while read line < test.lst 用于读取文件
d、<<here document . 文档终止符。经常用于数据库连接生成日志
e、补充:&>重定向所有输出。2>重定向错误输出。2>>重定向错误输出追加
正则表达式pattern
正则表达式是三个命令经常使用的。
元字符 | 含义 |
---|---|
. | 表示单个字 |
[ ] | 匹配任意范围内的任意单个字符 |
[^] | 匹配指定范围外的任意单个字符 |
匹配次数 | 含义 |
---|---|
* | 匹配其前面的字符任意次,包含0次 |
.* | 匹配任意长度的任意字符 |
? | 匹配其前面的字符0次或者1次 |
{m,n} | 匹配其前面的字符至少m次,至多n次 |
{m,} | 最少m次,最多不限 |
{m} | 出现m次 |
位置锚定 | 含义 |
---|---|
^ | 锚定行首 |
$ | 锚定行尾 |
^$ | 空白行 |
分组引用
1、grep命令
强大的文版搜索工具,能通过正则表达式搜索文件中的内容。
命令基本格式: grep [OPTION]… PATTERN [FILE]…
grep 【选项】 匹配内容 文件…
常用选项:
##grep的常用选项
grep
-i 忽视字符大小写
-v 显示没有被模式匹配到的行
-o 只显示被模式匹配到的部分
-A n 不仅显示匹配到的那一行,也将后面n行显示出来
-B n ...也将前面n行显示出来
-C n ...前后都显示n行
-n 标识出该列的编号
grep -E 相当于egrep
fgrep 快速搜索,不支持正则表达式
exp:
grep "hello" text.txt 显示出 hello 所在的行的内容
2、sed命令
sed命令是行处理命令。sed命令把要处理的行放到内存中处理,这个内存称为模式空间。使用sed命令默认不编辑源文件,只将需要处理的行进行处理。处理结束后默认将模式空间打印到屏幕上。
命令格式:
sed [options] ‘Address Command’ files…
options:
-n 静默方式,不再显示默认空间中的行。
-i 修改源文件。这个命令会修改源文件。
Address:要处理的位置
1、startline,endline 。开始行,结束行
$表示最后一行,$-1表示倒数第二行
2、/RegExp/ 正则表达式指定的格式。例如/hello/表示以hello开头的行。
3、/pattern1/,/pattern2/* 第一次被模式匹配到的行到第二次被模式匹配到的行
4、LineNumber 指定的行
5、startline ,+N 从start开始到向后的N行
Command:要处理的命令
d 删除符合条件的行
sed "1,2d" files 删除files的第一到第二行
sed "$d" files 删除文件的最后一行
sed '/^hello/'d files 删除以hello开头的行
s 替换命令 's/pattern/string/修饰符'
sed 's/book/books/g' file 将file中的book替换为books
修饰符g s命令默认只替换每行第一个被匹配到的位置。使用g命令用于全局替换
修饰符Ng sed 's/book/books/3g' 从第三处匹配开始替换
修饰符i 忽略大小写
sed 's/\\\\/\//g'。 将\\替换为/。也可使用'###,$$$,%%%'等定界符进行分割。可以改为's#\\\\#\/#'增加命令可读性
sed 's#\(love\)able#\1rs#g' 将loveable改为lovers.其中 \1 表示\(love\)匹配到的
sed "s/$test/hello/g".其中$test是变量。注意使用双引号
p 显示符合条件的行
sed "3,$" files 显示files的第三行到末尾
a\"string" 在指定的行后面添加文本。a\"string\nstring..." 可以添加多行
i\"string" 在指定的行前面添加文本
r file 将指定的文件file添加到指定的行后面。可以用来合并文件
sed -i "$r file" files 将file添加到files末尾后面。-i表示修改源文件
echo "hello" >1.txt
echo "world" >2.txt
sed -i '$r 2.txt' 1.txt
最后输出的文1.txt中包含hello world.(分两行)
w file 将后面的文件添加进file。与r反过来
sed -i '$w 1.txt' 2.txt 和上面输出结果是一样的
q 退出
sed -n 'p;n' file 打印奇数行
sed -n 'n;p' file 打印偶数行