Linux下find,sed,tr,grep,cut,wc等常用命令的使用和相关实例解析
本文由发表于6年前 | 操作系统 | 评论数 4 |  被围观 16,495 views+

如果对实例中涉及的相关Linux命令不了解,可以参考:Linux下sed,awk,grep,cut,find等常用命令介绍
查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件
解决方法:
find . -type f -perm 644 -exec ls -l {} \;
find ./ -type f -perm 644 | xargs ls –l
Linux文件查找命令find,xargs
find命令的格式:
find pathname -options [-print -exec -ok ...]
find 命令的参数:

-perm

按照文件权限模式查找
读权限:r:4 写权限:w:2 执行权限:x:1
文件属主具有读、写权限: rw:4+2=6
其他用户具有读权限:r:4

-type

查找的文件类型
-type f 文件
-type d 目录
-type l 符号链接文件

-exec

-exec 参数后面跟的是 command命令
command命令的终止,使用 ';' (分号)来判定,在后面必须有一个 ';'
'{}',使用{}来表示文件名,也就是find前面处理过程中过滤出来的文件,用于command命令进行处理
对于不同的系统,直接使用分号可能会有不同的意义, 使用转义符 '\'在分号前明确说明

xargs

find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

 

 

查找系统中所有文件长度为0的普通文件,并列出它们的完整路径
解决方法:
find / -type f -size 0 -exec ls -l {} \;

 

 

查找/arthinking目录中更改时间在7日以前的普通文件,并在删除之前询问它们
解决方法:
find arthinking -type f -mtime +7 -ok rm {} \;
find 命令的参数:
-mtime

最近规定时间内修改过的文件
-mtime 0:最近一天内被修改过的文件
-mtime +1:1天以前被修改过的文件

-ok

在执行ok之后的命令之前询问,而使用exec就不用询问,直接执行

 

 

查找系统中所有属于root组的文件 并列出它们的完整路径
解决方法:
find / -group root -exec ls -l {} \;
find 命令的参数:

-group:查找属于group指定用户组的文件

 

 

myfile.html内容如下:<b>This</b> is what <b>I</b> meant.
删除HTML标记,也就是要得到:This is what I meant.
解决方法:
cat myfile.html| sed 's/<b>//g;s/<\/b>//g'
cat命令:

cat主要有三大功能:
1.一次显示整个文件。
$ cat filename
2.从键盘创建一个文件。
$ cat > filename
只能创建新文件,不能编辑已有文件.
3.将几个文件合并为一个文件。
$cat file1 file2 > file

sed简介:

sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

sed脚本是一个sed的命令清单,启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常挑剔,在命令的末尾不能有任何空白或文本,如果在一行中有多个命令,要用分号分隔。以#开头的行为注释行,且不能跨行。

sed命令解释:

s/re/string

用string替换正则表达式re。

g

获得内存缓冲区的内容,并替代当前模板块中的文本。

;

如果在一行中有多个命令,要用分号隔开。

 

 

使用tr命令将trkh.txt文件的空行删除
解决方法:
tr -s ['\n']<trkh.txt
关于tr命令:

通过使用 tr,可以非常容易地实现 sed 的许多最基本功能。可以将 tr 看作为 sed 的(极其)简化的变体。使用tr命令可以用一个字符来替换另一个字符,或者可以完全除去一些字符,也可以用它来除去重复字符。

tr的命令格式为:

tr -c -d -s ["string1_to_translate_from"] ["string2_to_translate_to"] < input-file

-s

删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。

input-file

转换文件名。也可以使用其他格式输入,但这种格式是最常用的。

 

 

在txt目录下搜索所有包含有‘the’单词的.c文件,列出文件名
解决方法:
grep -lr "the" *.c

(如果是文件名中包含则这样写:ls | grep 'the.*\.c')

grep简介:

grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、 egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是 fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux 使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。

-l

打印匹配模板的文件清单

-r

递归地搜索目录。在缺省情况下,按照到目录的链接。

 

 

使用grep将express文件里以数字开头的行删除掉
解决方法:
grep '^[^[:digit:]]' express
[:digit:]

数字字符

^

锚定行的开始

[^]

匹配一个不在指定范围内的字符

 

 

查出所有用户名至少有4个字符的己登录用户
解决方法:
who | cut –d’ ’ -f 1 | grep '\w\{4,\}'
其他解法:
users | awk '{if($1~/.....*/) print $1}'
(说明:把users用户名送入管道,使用awk匹配第一个域 $1~/.....*/即至少有4个字符的用户)
关于who命令:

who命令主要用于查看当前在线上的用户情况。这个命令非常有用。如果用户想和其他用户建立即使通讯,比如使用talk命令,那么首先要确定的就是该用户确实在线上,不然talk进程就无法建立起来。

关于cut命令:

cut命令可以从一个文本文件或者文本流中提取文本列,具体的说就是在文件中负责剪切数据用的。cut是以每一行为一个处理对象的,这种机制和sed是一样的。

cut -d'分隔字元' -f fields

参数∶
-d ∶后面接分隔字元。与 -f 一起使用;
-f ∶依据 -d 的分隔字元将一段讯息分割成为数段,用 -f 取出第几段的意思;
-c ∶以字元 (characters) 的单位取出固定字元区间;
关于grep的命令参数:
\w

匹配文字和数字字符,也就是[A-Za-z0-9]

x\{m,\}

重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。

'\w\{4,\}'即是至少有4个字符的已登录用户

 

 

查出系统中所有用户标识号大于99的用户
解决方法:
cut -d: -f 1,3 /etc/passwd | grep '[0-9]\{3,\}' | cut -d: -f 1
其他解法:
cat /etc/passwd | awk 'BEGIN{FS=":"}{if($3>99) print $1}'
(说明:输出passwd的内容到管道,使用awk,BEGIN{FS=":"}表示先设置使用分号划分域,如果$3>99,即第三个划分的域(用户标识)大于99,则输出$1(用户名)
关于cut的几个命令参数
-d:

表示用‘:’分隔剪切数据

/etc/passwd

/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(分隔为7个字段,其格式和具体含义如下:

用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

-f 1,3 /etc/passwd 即是选择passwd文件中的以冒号分隔的第一列和第三列,grep ‘[0-9]\{3,\}’即是使用grep匹配包含大于99的数据项

 

 

系统中用户标识号大于99的用户数
解决方法:
cut -d: -f 1,3 /etc/passwd |grep '[0-9]\{3,\}' | wc -l
关于WC命令:

该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。

该命令各选项含义如下:

- c 统计字节数。
- l 统计行数。
- w 统计字数。

wc –l统计输出的行数,即是符合条件的用户数

 

 

按文件大小的降序列出目录中的所有文件
解决方法:
ls -l | sort -nrk 5
关于ls命令:

ls 命令经常要使用,通过使用 ls 命令可以查看linux文件夹包含的文件,查看文件权限(包括目录、文件夹、文件权限),查看目录信息等等,ls 命令在平常的linux操作中使用很频繁,所以这里介绍下 ls 命令的相关使用方法。

选项说明:
-a 用于显示所有文件和子目录(保罗点文件)。
-l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来。
-r 将目录的内容清单以英文字母顺序的逆序显示。
-t 按文件修改时间进行排序,而不是按文件名进行排序。
关于sort命令

Sort命令的功能是对文件中的各行进行排序。Sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上,Sort命令可以被认为是一个非常强大的数据管理工具,用来管理内容类似数据库记录的文件。

-n

按照数字方式排序。不加-n参数时排序结果根据最左面的数字开始,等同于字母的比较方式。按算术值对数字字段排序。数字字段可包含前导空格、可选减号、十进制数字、千分位分隔符和可选基数符。对包含任何非数字字符的字段进行数字排序会出现无法预知的结果。

-r

颠倒指定排序的顺序。

-k

作用是根据某个列来排序,默认是第1列(从1开始)。

-t

表示分割符,以:分割,默认情况下以空格分割

-nrk 5即是按照数字方式倒序排序,根据文件属性的第5列即是文件大小排序

除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。
本文链接:http://www.itzhai.com/linux-find-sed-tr-grep-cut-wc-and-other-commonly-used-commands-and-related-instances-of-the-use-of-analytical.html
关键字: , , , ,
arthinking Java技术交流群:280755654,入门群:428693174 more
分享到:
 
2011 6/10
文章评论
    4条评论
  1. www.cmboy.com 2011年06月13日01:20:13  #-49楼 回复 回复

    终于找到答案了

    • arthinking 2011年06月13日02:37:02 回复 回复

      这是一些关于Linux常用命令的实例

  2. Marylouise 2011年06月22日05:21:44  #-48楼 回复 回复

    Superbly iullimanting data here, thanks!

  3. fk 2014年11月09日20:23:12  #-47楼 回复 回复

    正在学习shell编程,非常感谢!找个文件,进行实例演示就更好了。

给我留言

有人回复时邮件通知我
操作系统的相关文章
随机文章 本月热门 热评
1 Java中BerkeleyDB的基本使用例子 环境配置 创建数据库 插入数据 2012/5/16
2 HTTP协议学习 – HTTP HTTP协议介绍 持续连接 HTTP消息 2011/11/6
3 Tomcat源码分析 – HttpServlet的源码分析 2011/11/10
4 web组件的设计思路与编写 效率问题 2013/3/17
5 Java基础笔记 – 增强的for循环For each循环 自动装箱拆箱 可变参数 2011/10/30
6 jQuery使用load函数访问Struts2中的Action实现局部刷新和注册事件 2011/5/28
友情推荐 更多
破博客 文官洗碗安天下,武将打怪定乾坤。多么美好的年代,思之令人泪落。
Mr.5's Life 白天是一名程序员,晚上就是个有抱负的探索者
行知-追寻技术之美 关注大数据,分布式系统
我爱编程 编程成长轨迹
Cynthia's Blog 学习笔记 知识总结 思考感悟
 
猜您喜欢
欢迎关注我的公众号 IT宅
关于IT宅 文章归档

IT宅中的文章除了标题注明转载或有特别说明的文章,均为IT宅的技术知识总结,学习笔记或随笔。如果喜欢,请使用文章下面提供的分享组件。转载请注明出处并加入文章的原链接。 感谢大家的支持。

联系我们:admin@itzhai.com

Theme by arthinking. Copyright © 2011-2015 IT宅.com 保留所有权利.