1 cut
cut是从数据文件或命令的输出中析取各种各样的数据域。
1) cut -cchars file
de>[pvg@server ~]$ who root :0 Dec 17 13:32 root pts/1 Dec 17 13:33 (:0.0) pvg pts/2 Dec 23 15:19 (192.168.18.150) [pvg@server ~]$ who | cut -c1-4 root root pvg de> |
/*析取第1个到第4个字符*/
de>[pvg@server ~]$ who | cut -c1-4,18- root Dec 17 13:32 root Dec 17 13:33 (:0.0) pvg Dec 23 15:19 (192.168.18.150)de> |
/*析取第1个到第4个字符和 第18个后的所有的字符*/
2)cut -ddchar -ffields file
其中:dchar是分隔符(默认的字段是制表符),fields是析取的字段
de>[pvg@server ~]$ cut -d: -f1,7 /etc/passwd root:/bin/bash bin:/sbin/nologin ...de> |
/*分隔符是:,析取第1个和7个字段*/
2 paste
paste刚好与cut相反,把多行和在一起。
1)paste -ddchar file
其中:dchar是分隔符(默认的字段是制表符)
de>[pvg@server ~]$ cat name Tony Lucy Fred [pvg@server ~]$ cat number (100) 100-100 (101) 400-402 (102) 500-302 [pvg@server ~]$ paste -d':' name number | cat Tony:(100) 100-100 Lucy:(101) 400-402 Fred:(102) 500-302 de> |
2) paste -ddchar -s file
同一文件的行粘帖在一起
de>[pvg@server ~]$ paste -s name | cat Tony Lucy Fred de> |
3 sed
sed是一个非交互性的文本编辑器。它编辑文件或标准输入导出的文件拷贝。所以,它不与初始的文件打交道,所有的改动输出到屏幕或重定向到文件。
格式为:
sed [options] '{command}' [filename]
1) 修改
A 替换 's/{old value}/{new value}/'
de>[pvg@server ~]$ echo The tiger cubs will meet on Tuesday after school | sed 's/tiger/wolf/' The wolf cubs will meet on Tuesday after schoolde> |
B 多次修改
a)第一种是使用 "-e" 选项,它通知程序使用了多条编辑命令。
de>[pvg@server ~]$ echo The tiger cubs will meet on Tuesday after school | sed -e 's/tiger/wolf/' -e's/after/before/' The wolf cubs will meet on Tuesday before schoolde> |
b)分号来分隔命令。注意分号必须是紧跟斜线之后的下一个字符。如果两者之间有一个空格,操作将不能成功完成。
de>[pvg@server ~]$ echo The tiger cubs will meet on Tuesday after school | sed 's/tiger/wolf/; s/after/before/' The wolf cubs will meet on Tuesday before schoolde> |
C 全局修改
sed 编辑器在找到一个要修改的项目并作了修改之后继续处理下一行,而不读整行。
de>[pvg@server ~]$ cat test 1 line line1 2 line line2 3 line line3 4 line line4 [pvg@server ~]$ cat test | sed 's/line/LINE/' 1 LINE line1 2 LINE line2 3 LINE line3 4 LINE line4 de> |
这意味着它们都处理每一行中出现的第一个选定序列。为了替换在同一行中出现多次出现的项目,必须指定在全局进行该操作。
de>[pvg@server ~]$ cat test | sed 's/line/LINE/g' 1 LINE LINE1 2 LINE LINE2 3 LINE LINE3 4 LINE LINE4 de> |
2) -n选项 de>[pvg@server ~]$ sed -n '1,2p' test 1 line line1 2 line line2 de> |
/*只显示1~2行*/
de>[pvg@server ~]$ sed -n '/line3/p' test 3 line line3 de> |
/*只显示含有line3行*/
3) 删除行 de>[pvg@server ~]$ sed -n '1,2d' testde> |
/*只删除1~2行*/
4)基本sed编辑命令:
sed编辑命令
p 打印匹配行
= 显示文件行号
a\ 在定位行号后附加新文本信息
i\ 在定位行号后插入新文本信息
d 删除定位行
c\ 用新文本替换定位文本
s 使用替换模式替换相应模式
r 从另一个文件中读文本
w 写文本到一个文件
q 第一个模式匹配完成后推出或立即推出
l 显示与八进制ASCII代码等价的控制字符
{ } 在定位行执行的命令组
n 从另一个文件中读文本下一行,并附加在下一行
g 将模式2粘贴到/pattern n/
y 传送字符
n 延续到下一输入行;允许跨行的模式匹配语句
4 grep
grep命令可以从一个文件或多个文件中搜索特定的字符串。其格式为:
grep pattern files
如:grep shell ed.cmd
1、参数:
grep -i pattern files :不区分大小写地搜索,默认情况区分大小写。
grep -v pattern files :查找不包括字符串的行。
grep -n pattern files :符合指定的模块的每一行前加上改行在文件中对应的行号。
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
2、grep正则表达式
1)$ grep '^a'
只显示以a开头的行。
2)$ grep 'test' d*
显示所有以d开头的文件中包含test的行。
3)$ grep 'test' aa bb cc
显示在aa,bb,cc文件中匹配test的行。
3)$ grep '[a-z]\{5\}' aa
显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
4)$ grep 'w\(es\)t.*\1' aa
如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行
。如果用egrep或grep -E,就不用"\"号进行转义,直接写成'w(es)t.*\1'就可以了。
5) $
锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
6).
匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
7)*
匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。
8)[]
匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
9)[^]
匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-F和H-Z的一个字母开头,紧跟rep的行。
10)\(..\)
标记匹配字符,如'\(love\)',love被标记为1。
11)x\{m\}
重复字符x,m次,如:'o\{5\}'匹配包含5个o的行。
12)x\{m,\}
重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
13)x\{m,n\}
重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。
正则表达式是一种表示方式, 让你可以查找匹配特定准则的文本。
. 匹配任何单个的字符,但是null除外
* 匹配在它之前的任何数目的单个字符
.* 代表 匹配任一字符的任一长度
^ 匹配前面的正则表达式 ,在字符串或者行的起始处
$ 匹配前面的正则表达式,在字符串或行的结束处
[] 匹配方括号内的任一字符 ^符号置于方括号里第一个字符则有相反含义:指的是匹配不在列表内的任一字符
\{n,m\} 区间表达式,匹配在它前面的单个字符重现的次数区间。\{n\}是重现n次 ,\{n,\}至少重现n次,而\{n,m\}为重现n至m次
\(\) 将\(与\)间的模式存储在特殊的保留空间。最后可以将9个独立的子模式存储在单个模式中。匹配于子模式的文本,可以通过转义序列\1至\9,被重复使用在相同模式里。
\n 重复在\(\与)方括号内第n个子模式至此点的模式。
{n,m} 与\{n,m\}一样,用在扩展的正则表达式中 ,只不过方括号前没有反斜杠
+ 匹配前面正则表达式的一个或多个实例 用在扩展的正则表达式中
? 匹配前面正则表达式的0个或1个实例 用在扩展的正则表达式中
| 匹配于| 符号前或后的正则表达式 用在扩展的正则表达式中
() 匹配于方括号扩起来的正则表达式群 用在扩展的正则表达式中
字符集:
[:alnum:] 数字字符
[:alpha:] 字母字符
[:blank:] 空格与定位字符
[:digit;] 数字字符
[:lower:] 小写字母字符
[:punct:] 标点符号字符
[:space:] 空白字符
[:upper:] 大写字母字符
Grep 查找 全文搜索正则表达式并打印出来,从文件中匹配整个模式,而后显示包含了匹配到得内容的行
Grep -v 反向显示
grep -n 在匹配到得结果中只显示输入的行数
grep -i 忽略大小写
grep -e 可以查找多个内容
grep -An 匹配到得行的后面的n行
grep -Bn 匹配到得行的前面的n行
grep -Cn 上下n行
grep -E 使用扩展正则表达式进行匹配
Cut 以段和列取内容
Cut -d: 以冒号隔开
Cut -f1 第一行
Cut -c2-6 第2-6个字符
Sort 排序 (对源文件没有影响,想保存用管道或sort -o 文件名)
Sort 默认以字符串排序
Sort -r 逆序
Sort -n 以数值来排序
Sort -f 忽略大小写
Sort -u 排序之后除去重复的行
Uniq 去除重复的行
Uniq -c 可以显示每行被重复的次数
Uniq -u 只显示不重复的行
Uniq -d 只显示重复的行
Sed 行编辑器
Sed -s 只替换源文件的第一个 加g 为每次都替换
Sed 起始位置 结束位置 / / g
Sed -i 替换源文件
Sed -e 同时实现多项应用条件
Sed -f 从文件中读取条件的选项
Sed -i 忽略大小写
Sed a\ 在当前行之前插入文本
Sed -d 删除行 i\在当前行之前插入文本
评论