linux 文本处理常用3个命令
相关概念
Linux 管道
管道
管道是进程间通信的方式之一,本质上可以理解为一种文件资源,其实是一种缓冲区。利用文件系统中file结构,通过在2个节点间创建临时节点,实现节点间的单向通信。
管道有无名管道和有名管道之分,区别是前者只能在具有相关关系(比如父子进程等)的进程间可以使用,后者则没有严格限制。
管道命令
管道命令使用“|”作为界定符,并且由于管道命令自身的原因,管道命令只能处理前面命令传递的正确信息,stdandard error不能被处理。也就是说前面命令要有stdandard output作为后面命令stdandard input,这也是其和连续执行命令的区别。比如ls 就不能作为管道命令,因为它不会接收数据。
grep
格式
grep 正则 -xxx somethingelse 【–color】 filename1【 filename2】
参数
-a 将二进制文件以text文件的方式查找数据
-c 计数
-i 忽略大小写的不同
-v 取反
-n 行号
特别参数
–color=auto
颜色标记
举例
eg :
grep ‘usr’ --color=auto Read.md index.md
从文件Read.md和 index.md中输出包含usr字符串的行
相关
与之相关的还有cut命令
比如
cut -d ':' -f // 2 以:分割,取第二列
-d 分割符
-f 所取的列
awk
处理每一行内的数据
awk 与其说是文本处理工具,更不如说是一种编程语言。
格式
awk ‘条件类型1{动作1} 条件类型2{动作2}’ filename
参数
-F 分隔符
特别参数
FS 分割符
NR 总行数
NF 总列数
$0当前行
举例
awk -F “” ‘{if(NR <30 && NR >10) print $1 }’ filename
// 取出10-30行的内容
甚至可以写循环和使用函数比如strstr(字符串查找)、touper(大写)等
sed
处理每一行内的数据
格式
sed -XXX filename
参数
-e 命令模式 输出到命令行中
-f 文件模式 输出到文件中
-n 安静模式 只有sed特殊处理的行会显示
-i 修改文件本身
特殊参数
g 全局匹配
s 替换
d 删除
p 显示
举例
cat filename|sed ‘10,30p’ 输出10-30行的内容
cat filename | sed ‘s/oldword/newword/g’ 用newword替换oldword
常见命令
wc 显示行数、字符数
sort 排序
uniq 去重计数
diff 文件比较