文本操作find cut sort wc sed awk

文本操作

查找文件: # 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 : 忽略大小写

默认字典排序

文本操作find cut sort wc sed awk

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
上一篇:chili


下一篇:嵌入式Linux系统编程学习之十Linux进程概述