文本操作
查找文件: # find 大概位置 以名字查找 名字
find /etc/ -name i18n
find /etc/ -name 70*
find /etc/ -name 70*net*
查找文件: whereis java --> java: /usr/bin/java
查找文本 /key 向下查询 n下一个 , N上一个
?key 向上查询 n上一个 ,N下一个
1.cut: 显示切割的行数据
-
-s : 不显示没有分隔符的行
-
-d : 指定分隔符对源文件的行进行分割
-
-f : 选定显示哪些列
- m-n m列到n列
- -n 第一列到n列
- m- 第m列到最后一列
- n 第n列
-
以 : 作为分隔符,切割passwd,输出从第3个字段到第5个字段
cut -d ":" -f 3-5 /et/passwd
cut -s -d ":" -f 3-5 /et/passwd
-
--output-delimiter指定输出的时候的各字符分隔符
显示1,3,7列
cut -d ":" -f 1,3,7 -s passwd
cut -d ":" -f 1,3,7 -s --output-delimiter="|" passwd
2.sort 排序:字典序和数值序
- sort : 排序文件的行
- -n : 按数值排序
- -r : 倒序 reverse
- -t : 自定义分隔符
- -k : 选择排序列
- -f : 忽略大小写
默认字典排序
sort -t ' ' -k 2 sort.txt --以空格为分隔符,对第二列进行排序
3 .wc
- 对每个文件输出行、单词、和字节统计数*
- -c 输出字节统计数
- -l 输出换行符统计数
- -L 输出最长行的长度
- -w 输出单词统计数
- --version 输出版本信息并退出
4.sed 行编辑器
- -n:静默模式,不再默认显示模式空间的内容
- -i:直接修改源文件
- -e Script -e Script:可以同上执行多个脚本
- -r:表示使用扩展正则表达式
- d:删除符合条件的行
- p:显示符合条件的行
- w file:将地址指定的范围内的行另存至指定文件
- r file:将指定的文件内容添加到符合条件的行的位置
- s/string1/string2:查找并替换,默认只替换每行第一个模式匹配到的字符串
--在sed.txt的第一行下面一行插入hello world
sed "1a hello world" sed.txt(源文件不发生变化)
cat sed.txt --查看sed.txt文件
sec -i "la hello world" sec.txt(源文件改变)
--在sed.txt的第二行上面一行插入hello world
sed "2i hello world" sed.txt(源文件不发生变化)
--删除第二行
sed "2d" sed.txt(源文件不发生改变)
sed -i "2d" sed.txt(源文件改变)
--删除文档中的每一行
sed "d" sed.txt
sed -i "d" sed.txt
--原来的内容要打印,匹配的行要打印,找到的行会打印两次
sed "/[0-9]/p" sed.txt
--匹配行中包含0-9任意一个字符的行,只打印找到的行
sed -n "/[0-9]/p" sed.txt
--将filesystem替换为FS
sed "s/filesystem/FS" sed.txt(区分大小写,只替换第一个)
sed "s/filesystem/FS/i" sed.txt(不区分大小写,只替换第一个)
sed "s/filesystem/FS/gi" sed.txt(不仅不区分大小写,还要行内全部替换)
--修改指定行内的内容
--将id:5:initdefalut中的默认运行级别5改为3
sed "s/\(id:)5\(:initdefalut)/\13\2"
sed -r "s/(id:)5(:initdefalut)/\13\2" --效果同上
--查找/etc/profile中包含PATH的行,将这些行写到指定的文件:hello.log中
sed -n "/PATH/w hello.log /etc/profile"
5. awk 文本分析工具
- 相对于grep查找、sed编辑、awk在对数据分析并生成报告时更为强大
- awk把文件逐行读入,以空格和制表符作为默认分隔符将每行切片,切开的部分再进行各种分析处理。
格式: awk -F '{pattern + action}'{filenames}
-
- 支持自定义分隔符
- 支持正则表达式匹配
- 支持自定义变量、数组 a[1] a[tom] map(key)
- 支持内置变量
- ARGC 命令行参数
- ARGV 命令行参数排列
- ENVIRON 支持队列中系统环境变量的使用
- FILENAMR awk浏览的文件名
- FNR 浏览文件的记录数
- FS 设置输入域分隔符,等价于命令行-F选项
- NF 浏览记录的域的个数
- NR 已读的记录数
- OFS 输出域分隔符
- ORS 输出记录分隔符
- RS 控制记录分隔符
- 支持函数
- print split substr sub gsub
- 支持流程控制语句,类C语言
- if while do/while for break continue
--只显示/etc/passwd的账户
awk -F ':' '{print $1}' passwd
awk -F ':' '{print $1,$7}' passwd --打印passwd文件的第一列和第七列
awk -F ':' '{print $1","$7}' passwd --指定分隔符,输出的第一列和第七列以逗号分隔
--在所有行开始前添加列名name,shell,在最后一行添加“shell,end”
awk -F ':' 'BEGIN'{print "name,shell"}'{print $1 "," "$7"} END'{print "shell,end"}' passwd
--搜索/etc/passwd有root关键字的所有行
cp /etc/passwd ./
awk '/root/{print $0}' passwd
--统计/etc/passwd文件中,每行的行号,每行的列数,对应的完整的行内容
awk -F ':' '{print NR "-" NF "-" $0}' passwd
--查找并截取打印某字段
awk -F ':' '/root/{print $1}' passwd