Shell处理文本时最常用的工具
linux命令解读方法
- 1Linux命令格式:命令字 [命令选项] [命令参数]
(1) 命令字即命令名称,在linux命令行界面使用的命令字唯一确定一个命令。
(2)命令选项:根据命令的不同,选项的个数和内容也不同。根据要实现的命令功能不同,选项的个数和内容也不同,大多数命令选项可以组合使用,命令选项有短格式和长格式的。
短格式就是单个英文字母,选项是使用“ -”符号(半角减号符)引导开始选项,字母可以是大写也可以是小写。如 ls -al 。
长格式的命令选项使用英文单词表示,选项前用“–”(两个半角减号符)引导开始的。如 --abc --xyz。
(3)命令参数:是命令处理的对象,通常情况可以是文件名、目录、或用户名。
-
命令字、命令选项、命令参数之间用空格来隔开。
-
help短格式是内部命令,格式是 “help 参数”,加选项-s 只显示命令的格式信息。
-
man命令,全称是(man page )手册页的意思。格式为 “man 参数 ”参数为命令,按方向键移动。它可以分页显示,也可以使用键盘上的Page Down、Page up 向下或向上翻屏。
-
info命令,全称是(info page)信息页的意思。是linux中类似于man 的另一中帮助信息的形式。信息页提供了主题间的连接跳转。
find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk;
find 文件查找
1查找txt和pdf文件
find .(-name "*.txt" -o -name "*.pdf") -print
2正则方式查找.txt和pdf
find . -regex ".*(.txt | .pdf)$"
-iregex: 忽略大小写的正则
3否定参数
查找所有非txt文本
find . ! -name "*.txt" -print
4指定搜索深度
//打印出当前目录的文件(深度为1)
find . -maxdepth 1 -type f
5定制搜索
//按类型搜索
find . -type d -print //只列出所有目录
-type f 文件
-type l 符号链接
//按时间搜索
-atime 访问时间 //单位是天,分钟单位是-amin
find . -atime 7 -type f -print
-mtime 修改时间 //内容被修改
-ctime 变化时间 //元数据或权限变化
//按大小搜索
find . -type f -size +2k
//按权限查找
find . -type f -perm 644 -print //找具有可执行权限的所有文件
//按用户查找
find . -type f -user tang -print //找用户tang所拥有的文件
6找到后的后续动作
find . -type f -name "*.swp" -delete
find . -type f -user root -exec chown tang {r}; //将当前目录下的所有权变更为tang
find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD; //将找到的文件全部copt到另一个目录
//如果后续执行多个命令,可以将多个命令写成一个脚本
-exec ./commands.sh {};
grep 文本搜索
grep match_pattern file
-o 只输出匹配的文本行
-v 只输出没有匹配的文本行
-c 统计文件中包含文本的次数
grep -c "text" filename
-n 打印匹配的行号
-i 搜索时忽略大小写
-l 只打印文件名
grep "class" -R -n //在多级目录中对文本递归搜索
grep -e "class" -e "vitural" file //匹配多个模式
xargs 命令行参数转换
将输入数据转化为特定命令的命令行参数
cat file.txt | xargs //将多行转化为单行输出
cat single.txt | xargs -n 3将单行转化为多行输出
-d 定义定界符(默认为空格)
-l {} 指定替换字符串
-0 指定为输入定界符
sort 排序
-n 按数字进行排序
-d 按字典进行排序
-r 逆序
-k N 指定按第N列排序
sort -nrk 1 data.txt
sort -bd data //忽略像空格之类的前导空白字符
uniq 消除重复行
sort unsort.txt | uniq //消除重复行
sort unsort.txt | uniq -c //统计各行在文件中出现的次数
sort unsort.txt | uniq -d //找出重复行
用 tr 进行转换
echo 12345 | tr '0-9' '9876543210'
cat text | tr ' ' ' ' //制表符转空格
cat file | tr -d '0-9' //删除所有数字
cat file | tr -c '0-9' //获取文件中所有数字
cat file | tr -d -c '0-9' //删除非数字数据
cut 按列切分文本
cut -f2,4 filename //截取文件的第2列 第4列
cut -f3 --complement filename //取文件除第3列的所有列
cat -f2 -d ";" filename //-d 指定定界符
-b //以字节为单位
-c //以字符为单位
-f //以字段为单位(使用定界符)
N-M N到M个字段
paste 按列拼接文本
paste file1 file2 -d "," //默认的定界符是制表符,可以用-d指明定界符
wc 统计行和字符的工具
wc -l file //统计行数
wc -w file //统计单词数
wc -c file //统计字符数
sed 文本替换利器
sed 's/text/replace_text/' file //替换每一行的第一处匹配的text
sed 's/text/replace_text/g' file //全局替换 如需直接替换源文件 使用-i
sed '/^$/d' file //移除空白行
awk 数据流处理工具
awk 'BEGIN{ statements } statements END{ statements }'
先执行begin中语句
再从文中读入一行 让后执行statements2 重复这个过程 直到文件全部被读取完毕
最后执行end语句
NR 当前行号
NF 当前行的字段数
-F 设置定界符