linux文本处理命令
cat、tac、more、less、head、tail、cut、sort、job、uniq、wc、diff、tr、sed、grep、awk
cat命令
选项
-n 显示行号
-E 显示行结束符 (Linux系统的文本文件的结束符是\(, windows系统的文本文件的结束符是\)+Enter)
-T 显示制表符
-A show-all
tac命令 反过来显示文本内容
more命令
内部指令
空格键 滚动到下一屏内容
Enter键 滚动到下一行内容
B键 向上滚动一屏内容
Q键 退出
less命令
内部指令和vim内部指令一样
head命令
选项
-n<数字>:指定显示头部内容的行数;也支持 head -NO. FILENAME
tail命令
-n<数字>:指定显示尾部内容的行数;也支持 head -NO. FILENAME
-f 动态显示文件尾部内容变化(监视日志文件)
cut命令
-d:指定字段的分隔符,默认的字段分隔符为空格
-f:显示指定字段的内容;
job命令
sort命令(不对源文件做处理只是显示排序,依据ASII表中的次序升序排列)
-n:依照数值的大小排序;
-d 按字典顺序排序
-o<输出文件>:将排序后的结果存入制定的文件;
-r:以相反的顺序来排序;
-t<分隔字符>:指定排序时所用的栏位分隔字符
-k 选择以哪个区间进行排序。
-u 排序之后相同行只显示一次
-f 排序时忽略字符大小写
uniq命令 (只处理相邻的重复行)
-d 只显示重复的行
-c 显示重复行的次数
wc命令 (word count)
-c 统计文本中的字节
-l 统计文本中的行数
-w 统计文本中的单词数
-L 统计最长一行包含多少个字符
diff (vim -d 或 vimdiff 比较两个文件内容 )
diff [OPTION] 文件1 文件2
-q 仅显示有无差异,不显示详细的信息
-c 显示全文内文,并标出不同之处
-b 不检查空格字符的不同
-B 不坚持空白行
-r 比较子目录中的文件
tr命令 (字符处理命令)用于转换或删除字符
tr [OPTION]... set1 [set2]
-d 删除出现在字符集中的所有字符
grep,egrep,fgrep-不支持正则表达式
根据模式搜索文本,并将符合模式的文本行显示出来
Pattern: 文本字符和正则表达式的元字符组合而成的匹配条件
grep [OPTIONS] PATTERN [FILE...]
-i ignore 忽略大小写
--color 高亮颜色显示
-v 取反
R, -r, –recursive 在某一目录下递归[所有子目录]查找某一字串:
-o 只显示被模式匹配的关键字符串
-E 使用扩展正则表达式
-A n 显示匹配到的行及其后面的n行 after
-B n 显示匹配到的行及其前面的n行 before
-C n 显示匹配到的行及其前后的n行 context
基本正则表达式 REGEXP REGular EXPression
元字符:
. :匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意字符
字符集合: [:digit:] [:lower:] [:upper:] [:alpha:] [:alnum:] [:space:] [:punct:]
匹配次数:(贪婪模式-尽可能长的匹配)
?:匹配其前面字符0或1次
:匹配其前面的字符任意次数
. : 匹配任意长度的任意字符(.*表示任意多个任意单个字符,即任意字符)
{m,n}: 匹配其前面的字符至少m次,至多n次 ({m,} 表示至少出现m次 {,n} 表示最多出现n次 {Y} 表示出现Y次)
位置锚定:
^: 锚定行首,此字符后面的任意内容必须出现在行首
\(: 锚定行尾,此字符前面的任意内容必须出现在行尾
^\): 空白行
<或\b 锚定词首,其后面的任意字符必须作为单词首部出现
>或\b 锚定词尾,其前面的任意字符必须作为单词尾部出现
分组 (KEY) KEY看做一个整体
后向引用
\1 引用第一个左括号以及与之对应的右括号所包括的所有内容
\2 引用第二个左括号以及与之对应的右括号所包括的所有内容
& 引用模式匹配整个串
扩展正则表达式
字符匹配 次数匹配以及其他和基本正则表达式相同
不同的如下:
+ 匹配其前面的字符一次或多次
{m,n} 匹配其前面的字符至少m次,至多n次 (不需要大括号)
()分组 (不需要斜线转义)
| 或者 ( a | b 表示a 或者b字符串 表示竖线的左边或右边 整体)
sed ( Stream EDitor)
sed 基本用法;(逐行处理,默认不修改原文件,仅对模式空间中的数据做处理,处理结束后,将模式空间 打印至屏幕)
sed [OPTIONS] ‘AddressCommand’ file ...
-n 静默模式,不再默认显示模式空间的内容
-i 直接修改原文件
-e 多项使用 -e SCRIPT -e SCRIPT
-f /PATH/TO/SED_SCRIPT
-r 支持扩展正则表达式
Address:
1、StartLine,EndLine
1,100
\(: 最后一行
2、/RegExp/
/^root/ 以root为开头的行
3、/pattern1/,/pattenrn2/ 第一次被pattern1匹配到的行开始,至第一次被pattenrn2匹配到的行结束,这中间的所有行
4、LineNumber
指定的行
5、StartLine,+N
从StartLine开始,向后的N行
Command:
d 删除匹配的行 D-首次出现的行删除
p 显示符合条件的行
a \string 在指定的行后面追加新行,内容为string
i \string 在指定的行前面追加新行,内容为string
r FILE 将指定的文件的内容添加至符合条件的行处
w FILE 将地址指定范围内的行另存至指定的文件中
s/pattern/string/ 查找并替换(默认只替换每行中第一次被模式匹配到的字符串)
s///中的/分割符也可以使用其他的(如s###,s@@@)
加修饰符:
g:全局替换 s/pattern/sting/g
i: 忽略字符大小写
也可以 后向引用
\(\),\1,\2
&:引用模式匹配整个串
awk
每次只读取一行操作 默认以空白符作为分隔符 以位置变量(\)N) 引用
awk [options] 'script' file1 file2 …
awk [options] 'PATTERN {action}' file1 file2 …
print
print使用格式:
print item1,item2,……
要点:
1、各项目之间使用逗号分隔,而输出时则以空白字符分隔
2、输出的item可以为字符串或数值,当前记录的字段(如$1),变量或awk的表达式,数值会先转换为字符串,而后再输出
3、print 命令后面的item可以省略,此时其功能相当于print $0 ,因此,如果想输出空白行,则需要使用print “ ”
例如:
awk ‘BEGIN {print "line one\nline two\nline three"}'
awk -F: '{print $1,$2}' /etc/passwd
printf
prinrf 命令的使用格式
printf format, item1,item2……
要点
1、其与print命令的最大不同是,printf需要指定formart;
2、format 用于指定后面的每个item的输出格式
3、printf 语句不会自动打印换行符: 常以\n作为换行操作符
formart格式的指示符都以%开头,后跟一个字符:
%c 显示字符的ASCII码
%d,%i 十进制整数
%e,%E 科学计数法显示数值
%f 显示浮点数
%g,%G 以科学计数法的格式或浮点数的格式显示数值
%s 显示字符串
%u 无符号整数
%% 显示%自身
修饰符
N:显示宽度
-:左对齐
+:显示数值符号
例如: awk
awk 变量
awk内置变量之记录变量
FS:field separator 读取文本时所使用字段分隔符 默认是空白字符
RS: record separator 输入文本信息使用的换行符
OFS:out field separator 输出时所使用字段分隔符
ORS:out record separator 输出时所使用的换行符
awk内置变量之数据变量
NR:命令所处理的记录数;如果有多个文件,这个数目会把处理的多个文件中的行统一计数;
NF:当前记录的field个数
FNR:与NR不同的是,FNR用于记录正处理的行是当前这一文件中被总共处理的行数
ARGV: 数组,保存命令行本身这个字符串,如 awk '{print $0}' a.txt b.txt 这个命令中,ARGV[0]保存awk, ARGV[1] 保存a.txt
AGRC:awk命令的参数的个数
FILENAME:awk命令所处理的文件的名称
ENVIRON:当前shell环境变量及其值得关联数组;
用户自定义变量
gawk 允许用户自定义自己的变量以便在程序代码中使用。
awk 的操作符:
算术操作符:
-x 负值
+x 转换为数值
x^y
x**y 次方
x*y 乘法
x/y 除法
x+y
x-y
x%y
字符串操作符:
=
+=
-=
*m
/m
%m
^=
**=
++
--
布尔值符号
x < y
x <= y
x > y
x >= y
x == y
x != y
x ~ y
x ! ~ y
subscript in array
表达式之间的逻辑关系
&&
||
条件表达式
selector ? if-true-exp:if-false-exp
awk 的模式
1、Regexp 正则表达式,格式为/regular expression/
2、expression 表达式,其值非0或为非空字符时满足条件,如 $1 ~ /foo/ 或$1 == "baidu" 用运算符~ (匹配)和!~ (不匹配)
3、Ranges 指定的匹配范围,格式为pat1,pat2
4、BEGIN/END 特殊模式,仅在awk命令执行前运行一次或结算前运行一次
5、Empty(空模式) 匹配任意输入行:
列如:
1、以':' 为分隔符,如果第五域有user则输出该行
awk -F ':' '{if ($5 ~ /user/) print $0}' /etc/passwd
2、 统计单个文件中某个字符(串)(中文无效)出现的次数
awk -v RS='character' 'END {print --NR}' xxx.txt
常见的Action
Expression 表达式
Control statements 控制语句
Compound statements
Input statements
Output statements
文件查找
locate: 是基于根据全系统的文件数据库进行的,非实时,模糊匹配,查找速度快。
updatedb 手动更新文件数据库
find 实时查找、精确查找、遍历指定目录中的所有文件完成查找,速度慢
find 查找路径 查找标准 查找到以后的处理动作
查找路径:默认为当前目录
查找标准:默认为指定路径下的所有文件
处理动作:默认为显示
匹配标准:
-name FileName 对文件名作精确匹配 (支持文件名通配符 ? * [ ] )
-iname FileName 文件名匹配时不区分大小写
-regex Pattern 基于正则表达式进行文件名匹配
-user UserName 基于文件的属主文件查找
-group GroupName 基于文件的属组文件查找
-gid UID 基于文件的属主ID文件查找
-gid GID 基于文件的属组ID文件查找
-nouser 查找没有属主的文件
-nogroup 查找没有属组的文件
-type 根据文件类型查找
f 、d、c、b、l、p、s 文件的类型
-size
[+|-] #k 查找文件大于或小于#k大小的文件
#M
#G
组合条件查找 -a 、-o 、-not (默认的是或条件)
根据时间查找
-mtime 天数
-ctime
-atime
[+|-] 天数 查找文件被多少天之前或之内修改(访问、改变)
-mmin 分钟数
-cmin
-amin
根据权限查找
-perm mode 权限位精确匹配
-perm /mode 任意一位匹配即满足条件
-perm -mode 文件权限能完全包含mode时才能匹配
执行动作:
-print:显示
-ls 类似ls -l的形式显示每一个项目的详细信息
-ok COMMAND {} ; 每一次操作都需要用户的确认
-exec COMMAND {} ; 不需要确认
find ./ -perm -020 -exec mv {} {}.new ;