linux sed查找文件中某个值,Linux下find、awk、sed、grep命令的例子

find:搜索工具

列出当前目录及子目录下所有文件和文件夹

find .

在/home目录下查找以.txt结尾的文件名,-i表示忽略大小写

find /home -iname "*.txt"

1

2

3

4

find命令的详细介绍

awk:数据快速处理

test.txt

2 this is a test

3 Are you like awk

This's a test

10 There are orange,apple,mongo

1

2

3

4

5

指定,为分隔符,在test中查找,并且输出分隔之后的每行的第一、第四个元素。分隔符默认为空格(包括tab)

awk -F, '{print

math?formula=1%2C2}' 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",

math?formula=1%2C4}' log.txt

2 a

3 like

This's

10 orange,apple,mongo

设置变量-v参数,a=1,如果原有元素为非数字则进行运算时为0

awk -va=1 '{print

math?formula=1%2C1+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 '

math?formula=1%3E2%20%26%262=="Are" {print

math?formula=1%2C2,$3}' log.txt

3 Are you

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

awk命令详细介绍

sed:文本替换

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#/

1

2

3

4

5

6

7

8

9

10

grep:文本搜索

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

输出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

1

2

3

4

5

6

grep一般结合其他命令来用

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

fgrep:fast grep等于grep -F,不支持正则表达式

egrep:extended grep等于grep -E,支持扩展的正则表达式

命令合成

在当前目录下查找名称后缀为.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"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值