linux常用工具awk,Linux常用工具命令(regex-cut-grep- xargs-sed-awk-sort-find)

Linux常用工具命令(regex-cut-grep-

xargs-sed-find-awk-sort)

这些内容相当丰富,难以穷尽,后续不断更新。

一:regex(正则表达式)

正则表达式是一种文本模式,包括普通字符和元字符,模式描述在搜索文本时要匹配的一个或多个字符串。regex在各种命令中的形参名称一般为:

PATTERN。

定位及转义匹配:

字符

说明

^

匹配必须从字符串或一行的开头开始

$

匹配必须出现在一行或字符串的末尾

\

将下一个字符记为特殊字符,多为转义。“\n”匹配换行符;序列“\\”匹配“\”。

\d

匹配一个数字字符,等效于[0-9]

\D

匹配一个非数字字符,等效于[^0-9]

\n

匹配换行符

\r

匹配回车符

\t

匹配一个制表符

限定匹配:

字符

说明

*

匹配前面子表达式零次或多次

+

匹配前面子表达式的一次或多次

?

匹配前面子表达式零次或一次

{n}

匹配确定的n次

{n,}

至少匹配n次

{n,m}

至少匹配n次,至多匹配m次

x|y

匹配x或y

[字符序列]

匹配字符集合,如[xyz]表示匹配[]中的xyz任意字符

[^字符序列]

反向匹配字符集合,如[^xyz]表示匹配不在[]中的xyz任意字符

[first-last]

匹配从first到last范围内的任何单个字符。如[a-z],[A-Z],[0-9]

可以使用国际模式匹配的类名:

[[:upper:]] [A-Z]

[[:lower:]] [a-z]

[[:digit:]] [0-9]

[[:alnum:]]

[0-9a-zA-Z]

[[:space:]]

空格或tab

[[:alpha:]] [a-zA-Z]

二:cut命令

cut命令主要用途在于,对文本行内(处理的对象是行内的字符串信息)的数据进行分解,能以某字符作为分割参数,加以切割,来取得我们所需要的数据[列]。多用于分析log,但在处理多空格相连的数据时较麻烦。也就是说cut命令更适用于每一行具有统一的格式的文本或数据。

命令格式:cut OPTION... [FILE]...

常用参数:

用range[表示范围]

N N'th byte, character or field, counted from 1

N- from N'th

byte, character or field, to end of line

N-M from N'th to M'th (included) byte, character or field

-M from first

to M'th (included) byte, character or field

-b  range 截取本行range字符

-c  range 截取本行range字符

-f 用来指定经特定分隔符分割后的区域,表示取第几段的意思。举例:-f 3; -f 3,5

-d 用来指定分隔符,默认分隔符TAB。举例:-d

‘:’ ;  -d  ‘-’;

-d  ’x’ ; -d ’空格’。

-s 忽略不包含指定分隔符的文本行。

[注意]

使用-d指定的分割符后,一般要与-f连用,取出所要的区段;

-b与-c后面必须指定range范围,构成完成的命令;

没有指定输入文件时,默认以标准input为输入。

[举例]

export | cut -c 2

export | cut -c 2-8

export | cut -c 2-

export | cut -c -2

echo $PATH | cut -d ':' -f 1

echo $PATH | cut -d ':' -f 1,4

echo $PATH | cut -d ':' -f 1,4,6

export > testcut.txt

echo "AAAAAA" >> testcut.txt

cut -s -d "-" -f 1

testcut.txt [-s会忽略掉最后加的AAAAAA行]

三:grep

grep命令是主要是分析文本行(处理的对象是文本行),它是强大的文本搜索工具,能使用多种类型的正则表达式来搜索文本,并且可以控制匹配结果的输出格式和内容等。

命令格式:grep [OPTION] ... PATTERN

[FILE]...

-c, --count 输出控制,只输出每个文件匹配行的计数;

-f,--file=FILE 指定PATTERN来自文件FILE;

-w, --word-regexp 强制全字匹配有效,比如匹配’is’,那么’this’就会被忽略;

-x, --line-regexp 整行匹配有效;

-v, --invert-match 反向匹配,获得不包含指定匹配模式的行信息;

-n, --line-number 输出时打印出匹配字段行和所在的行号;

-R, -r, --recursive 递归的去匹配文件夹下的每个文件;

-i, --ignore-case 匹配字符不区分大小写;[默认是区分大小写的]

-h, --no-filename 多文件搜索时,输出不显示文件名;

-l, --files-with-matches 多文件搜索时,输出只显示文件名;常与xargs连用;

[举例]

显示文件configre.txt中含有小写单词create的行:

grep "create" configure.txt

显示文件configre.txt中含有大写单词CREATE的行和行号[n]:

grep "CREATE" -n configure.txt

递归[r]的搜索当前目录下的所有文件和目录及子目录,打印包含CREATE的行和行号[n]:

grep "CREATE" -rn ./

递归[r]的搜索当前目录下的所有文件和目录及子目录,打印出包含独立单词[w]CREATE的行及行号[n],但是CREATE中的6个字母不区分大小写[i]:

grep "CREATE" -rnwi ./

递归[r]的搜索当前目录下的所有文件和目录及子目录,仅打印含有CREATE的文件名[l]:

grep "CREATE" -rl ./

补充1:过滤关键字

grep -v -E "key1|key2|key3"

四:xargs

xargs命令的作用是将参数列表转换成小块分段传递给其它命令,避免参数列表过长的问题。简言之,它服务于其它命令,为其它命令准备参数,xargs可以将参数列表加以处理,转换成小块分段。

典型的使用场景:常常会将A命令的输出,当做B命令的输入;大多数情况下可能A命令的输出结果不能满足B命令的格式要求;那么xargs将会对A命令的输出加以分段/处理,传递给B命令作为输入。

常用参数:

-i {}替换

ls | xargs -i mv {}

{}.bak

-n 数字,以n指定的大小进行分组

-t 先打印出命令,然后再执行

-p 交互模式

[举例]

用xargs列出前目录下的文件及文件夹,成为名称文本:

ls | xargs

用xargs列出前目录下的文件及文件夹,成为名称文本,每4个一组:

ls | xargs -n 4

name,拷贝为name.bak:

ls | xargs -i cp -rf {} {}.bak

删除当前目录及其子目录下的所有pyc文件,每20个为一组(以空格为分隔符),作为rm

-rf的参数:

find ./ -name *pyc | xargs -n 20 rm -rf

find ./ -name *pyc | xargs -n 20 rm -rf

sed是一个强大的文件处理工具,以文件的行为单位进行处理,可以将数据进行替换,删除,更新等。它是一种在线编辑器,能自动处理多个文件,它依次处理给定文件的每一行;处理时,把当前处理的行存储到临时缓冲区中;接着用sed命令处理缓冲区中的内容,完成后将缓冲区的内容发送到屏幕;原文件内容并没有改变,除非重定向输出。

命令格式: sed [OPTION]... {script-only-if-no-other-script}

[input-file]...

行表示写法:n;n,m;n,$

-n 不自动打印处理后的结果,只是默默的处理

-i 直接作用在目标文件上,不会输出结果

[举例]

删除命令:d

删除test.py文件中的第10行:

sed -e '10d' test.py

删除test.py文件中的第10至40行:

sed -e '10,40d' test.py

删除test.py文件中的第10至最后行:

sed -e '10,$d' test.py

删除test.py文件中含有django行:

sed -e '/django/'d test.py

替换命令:s

将test.py文件中的每行第一个from替换为FROM:

sed -e 's/from/FROM/' test.py

将test.py文件中的每行所有的from替换为FROM:

sed  -e 's#from#FROM#g' test.py

[紧跟着s命令的都被认为是新的分隔符,此处为#]

将test.py文件中的每行所有的from替换为FROM,直接作用在原文件test.py上:

sed  -i

-e 's/from/FROM/g' test.py

要在第30行以后插入一行新的内容:

sed -i '30a\AAAAAAAAAAAAA' test.py

sed -i '/AAAAAAAAAAAAA/aBBBBBBBBBBBBB' test.py

六:find命令

find命令主要的作用是在给定的搜索范围内的文件系统中,按条件查找目标文件/夹的集合。

命令格式:find pathname

-options [-print -exec -ok ...]

-name按照文件名查找文件。

-perm按照文件权限来查找文件。

-prune使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。

-user按照文件属主来查找文件。

-type查找某一类型的文件,诸如:b

-块设备文件;d

-目录;c

-字符设备文件;p

-管道文件;l

-符号链接文件;f

-普通文件。

[举例]

查找当前目录及子目录下,所有py文件

find ./ -name *py

find ./ -name *py

-exec ls -l {} \;

为了用ls

-l命令列出所匹配到的文件,可以把ls

-l命令放在find命令的-exec选项中

find . -type f -exec ls -l {} \;

查找当前用户主目录下的所有文件:

find $HOME -print

find ~ -print

让当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件

$ find . -type f -perm 644 -exec ls -l {} \;

为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径;

find / -type f -size 0 -exec ls -l {} \;

为了查找当前文件系统中的所有目录并排序;

find . -type d | sort

查找当前目录(不包括其子目录)下的空文件:

find -maxdepth 1 -empty

简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理,在其对数据分析并生成报告时,显得尤为强大。它是对文本每行切片并处理的工具。它自成语言,拥有自己的语法,编写的程序可以读取输入文件、切分文件中的每行、抽取分片并做进一步处理计算生成报表等。

命令格式:awk '{pattern + action}' {filenames}

其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。Filenames为文件集合,通常awk是以文件的一行为处理单位的。

awk工作流程:读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键"

或 "[tab]键"。

-F指定域分隔符,不指定默认为"空白键"

或 "[tab]键"

print $N active的一种,打印此行的第N个分片

awk常用的内置变量:

FILENAME awk浏览的文件名

FNR

浏览文件的记录数

FS

设置输入域分隔符,等价于命令行 -F选项

NF

浏览记录的域的个数

NR

已读的记录数

[举例]

常规用法:

last -n 5 | awk '{print $1}'

cat /etc/passwd |awk -F

':' '{print $1}'

awk -F ':' '{print $0}' /etc/passwd

进阶用法BEGIN-EDN:

cat /etc/passwd |awk -F

':' 'BEGIN {print

"name,shell"} {print $1","$7} END {print

"blue,/bin/nosh"}'

awk搜索,正则匹配行:

awk -F: '/root/{print $0}' /etc/passwd

awk -F: '/root/{print $3}' /etc/passwd

print与printf:

awk -F ':' '{print

"filename:" FILENAME ",linenumber:" NR ",columns:" NF

",linecontent:"$0}' /etc/passwd

find ./ -name *py -exec ls -l {} \;

[参考下文八]

find ./ -name *py -exec ls -l {} \; |

awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ",

size}'

当前目录及其子目录下所有py文件的总行数:

find ./ -name *py | xargs cat {} | awk

'BEGIN{count=0} {count=count+1;print $0} END{print

count}'

find ./ -name *py | xargs cat {} | awk

'BEGIN{count=0} {count=count+1} END{print count }'

八:sort命令

准确的说sort命令处理的单位是每个切片(连续一个或一个以上字符的组合)。广义化来说,每个文件含有多行文本,而每行文本一般会被分隔符(默认为空格和tab)切开,也就是每个切片,这时可以将切片作为关键字排序,来达到对文件或文件行的排序作用。默认是按ASCII码值排序。

命令格式:sort [OPTION]...

[FILE]... 或者sort [OPTION]...

--files0-from=F

常用选项:

-b, --ignore-leading-blanks 忽略每一行的空白字符;

-c, --check 排序前,检查待排序列是否已经有序,多数情况下加上-c是无害处的;

-u, --unique 去除带排序列中重复的切片;

-r, --reverse 反转排序结果,简言之逆序;

-o, --output=FILE 重定向排序结果,可以覆盖原文件;

-n, --numeric-sort 按数值顺序排序,而非默认的ASCII码值,此参数主要针对数字排序;

-t, --field-separator=SEP 指定切片限定符,类似于cut -d命令;

-k, --key=POS1[,POS2] 选择关键字,类似于cut –f命令;

一般-t与-k参数会同时使用。

[举例]

cat seq.txt

banana

apple

pear

orange

banana

默认按ASCII码值排序:

sort seq.txt

排序中去重:

sort -u seq.txt

逆序(从大到下)排序:

sort -r number.txt

重定向排序结果到原文件:

sort -r number.txt -o number.txt

安数值排序:

sort -n number.txt

按‘:’切片,选第二个关键字按数值大小排序:

cat book.txt

banana:30:5.5

apple:10:2.5

pear:90:2.3

orange:20:3.4

sort -n -k 2 -t : book.txt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值