Linux四剑客find/grep/awk/sed
Posted Silentdoer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux四剑客find/grep/awk/sed相关的知识,希望对你有一定的参考价值。
find ./ -name "*txt" -maxdepth 1 -type f -mtime -2 -exec mv {} ./bbb.txt ;
这条命令表示找当前目录(-maxdepth 1,没这条是递归找当前目录的所有子目录)且是文件的(-type f)且两天以内创建的(-mtime -2,如果是+2表示两天前创建的,还可以-mmin以分钟为单位),且名字是匹配*txt(linux通配符和regex不同,linux自带的特殊字符
必须在""内)然后将这些文件执行mv命令,第一个参数是{}它来自前面找到的所有文件,第二个参数是要移动的目标位置(如果是目录则只是移动,如果是文件则表示同时要改名),最后的;是find执行exec的固定格式不用管;
find是通过查找文件名来找出文件
grep 可以通过-v搜索出匹配的行的其他行,如grep -v ‘^$‘ log.log表示搜索出文件里所有的非空行;还可以多次grep来串行过滤;
grep是搜索文件内容
awk 也是搜索文件内容,但它可以以对列进行排除显示(grep是显示行),如awk -F ‘:‘ ‘{print $1}‘ log.log表示将文件中以:分割的字符串拆分成N列,以下标1开始,这里打印第一列;
sed读和sad一样,它是对输出的内容修改后显示,但是不会修改源文件,如sed ‘s/aaa/bbb/‘ log.log表示显示文件内容之前对显示的内容是aaa的修改为bbb进行显示(s是替换,p表示打印,这里不能加p否则会重复打印),这个可以用#代替/号
还有uniq命令如uniq -i表示对行进行忽略大小写模式的distinct操作;
sort表示对行进行字典排序,加-u也可以同时进行uniq操作,加-r可以降序,-n表示以数值序排序(10比2前,如果是字典序则2比10前)
而如果要实现以某列为排序依据可以-t ‘ ‘ -k 2表示以空格作为列依据,然后以第二列作为排序依据进行排序;
如果要将管道符前面的结果作为grep搜索的pattern则可以用 grep -oP ‘[.{3}](?= ip=1.1.1.1)‘ | xargs -r -I % /bin/grep "[%]" bbb.txt
一般情况下前面的搜索结果只能作为grep的要搜索的文件的参数而不能是pattern,这里通过xargs -r -I %实现了作为pattern
以上是关于Linux四剑客find/grep/awk/sed的主要内容,如果未能解决你的问题,请参考以下文章