前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux下find、awk、sed、grep命令的例子

Linux下find、awk、sed、grep命令的例子

作者头像
wuweixiang
发布2019-04-09 16:08:46
1.8K0
发布2019-04-09 16:08:46
举报
文章被收录于专栏:吴伟祥吴伟祥

find:搜索工具

代码语言:javascript
复制
# 列出当前目录及子目录下所有文件和文件夹
find .
# 在/home目录下查找以.txt结尾的文件名,-i表示忽略大小写
find /home -iname "*.txt"

find命令的详细介绍

awk:数据快速处理

代码语言:javascript
复制
# test.txt
2 this is a test
3 Are you like awk 
This's a test
10 There are orange,apple,mongo
代码语言:javascript
复制
# 指定,为分隔符,在test中查找,并且输出分隔之后的每行的第一、第四个元素。分隔符默认为空格(包括tab)
awk -F, '{print $1,$2}' test.txt

2 this is a test 
3 Are you like awk 
This's a test 
10 There are orange apple

# 格式化输出,第一个元素和第四个元素的占位
awk '{printf "%-8s %-10s\n",$1,$4}' log.txt

2        a
3        like
This's
10       orange,apple,mongo

# 设置变量-v参数,a=1,如果原有元素为非数字则进行运算时为0
awk -va=1 '{print $1,$1+a}' log.txt

2 3
3 4
This's 1
10 11

# 将awk命令存为脚本保存,使用-f参数作为允许脚本
awk -f cal.awk log.txt

# 过滤第一项大于2的行(很神奇的是,这里的非数字不能作为0来比较)
awk '$1>2' log.txt

3 Are you like awk
This's a test
10 There are orange,apple,mongo

# 过滤第一列大于2并且第二列等于'Are'的行
awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt

3 Are you

awk命令详细介绍

sed:文本替换

代码语言:javascript
复制
# old.txt中的old_abc换为new_abc,s表示替换,g表示每行中找到的字符都需要被替换,否则只替换每行第一次出现的字符, '1,2s'表示第一行到第二行的所有行
# sed不能在原有文本基础上进行替换,所以必须生成新的文件new.txt
sed "1,2s/old_abc/new_abc/g" old.txt > new.txt
# 删除行号范围内指定的行
sed -i "1,2d" old.txt
# 删除模式匹配的行
sed -i "/abc/d" old.txt
# 删除与替换同时进行,加上-e参数,替换old_abc为new_abc,并且删除第二行
sed -i -e "s/old_abc/new_abc/g" -e "2d" old.txt
# s指令后面并不一定使用/作为分隔符,可以加上#,比如s#/

grep:文本搜索

Global Regular Expression Print(全局正则表达式打印)

代码语言:javascript
复制
# 输出test.txt中搜索含有'abc'或'Abc'的行
grep '[aA]bc' test.txt
# 输出test.txt中搜索含有'abc'的行,-i表示忽略大小写
grep -i 'abc' test.txt
# 输出test.txt中搜索含有'abc'的前三行、后三行,-A(After)匹配行之后,-B(Before)匹配行之前
grep "abc" -A 3 -B 3 test.txt

grep一般结合其他命令来用

grep也可以使用正则进行匹配

  1. fgrep:fast grep等于grep -F,不支持正则表达式
  2. egrep:extended grep等于grep -E,支持扩展的正则表达式

命令合成

代码语言:javascript
复制
# 在当前目录下查找名称后缀为.log的文件,并且将输出转换为一行(xargs),找到abc。-i表示忽略大小写,-n表示输出行号
find . -name "*.log" | xargs grep -i -n "abc"
# -l输出匹配的文件名,不输出匹配行;-R表示递归目录;-Z表示文件名间使用null进行分隔
# -0表示xargs只格式化一个文件
fgrep -lRZ "1.2.3.4" . | xargs -0 sed -i -e "s/1.2.3.4/5.6.7.8"

总结

  • 三个命令的运用形式  grep ‘字符’ 文件  sed ‘命令’ 文件  awk ‘条件{命令}’ 文件
  • 单引号内就是正则表达式的用法

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • find:搜索工具
  • awk:数据快速处理
  • sed:文本替换
  • grep:文本搜索
    • 总结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档