Linux下find,sed,tr,grep,cut,wc等常用命令的使用和相关实例解析
如果对实例中涉及的相关Linux命令不了解,可以参考:Linux下sed,awk,grep,cut,find等常用命令介绍
- 查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件
解决方法:
find . -type f -perm 644 -exec ls -l {} \;
find ./ -type f -perm 644 | xargs ls –l
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之后的命令之前询问,而使用exec就不用询问,直接执行
- 查找系统中所有属于root组的文件 并列出它们的完整路径
解决方法:
find / -group root -exec ls -l {} \;
-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主要有三大功能:
1.一次显示整个文件。
$ cat filename
2.从键盘创建一个文件。
$ cat > filename
只能创建新文件,不能编辑已有文件.
3.将几个文件合并为一个文件。
$cat file1 file2 > file
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
sed脚本是一个sed的命令清单,启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常挑剔,在命令的末尾不能有任何空白或文本,如果在一行中有多个命令,要用分号分隔。以#开头的行为注释行,且不能跨行。
s/re/string 用string替换正则表达式re。
g 获得内存缓冲区的内容,并替代当前模板块中的文本。
; 如果在一行中有多个命令,要用分号隔开。
- 使用tr命令将trkh.txt文件的空行删除
解决方法:
tr -s ['\n']<trkh.txt
通过使用 tr,可以非常容易地实现 sed 的许多最基本功能。可以将 tr 看作为 sed 的(极其)简化的变体。使用tr命令可以用一个字符来替换另一个字符,或者可以完全除去一些字符,也可以用它来除去重复字符。
tr -c -d -s ["string1_to_translate_from"] ["string2_to_translate_to"] < input-file
- 在txt目录下搜索所有包含有‘the’单词的.c文件,列出文件名
解决方法:
grep -lr "the" *.c
(如果是文件名中包含则这样写:ls | grep 'the.*\.c')
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的功能。
- 使用grep将express文件里以数字开头的行删除掉
解决方法:
grep '^[^[:digit:]]' express
- 查出所有用户名至少有4个字符的己登录用户
解决方法:
who | cut –d’ ’ -f 1 | grep '\w\{4,\}'
其他解法:
users | awk '{if($1~/.....*/) print $1}'
(说明:把users用户名送入管道,使用awk匹配第一个域 $1~/.....*/即至少有4个字符的用户)
who命令主要用于查看当前在线上的用户情况。这个命令非常有用。如果用户想和其他用户建立即使通讯,比如使用talk命令,那么首先要确定的就是该用户确实在线上,不然talk进程就无法建立起来。
cut命令可以从一个文本文件或者文本流中提取文本列,具体的说就是在文件中负责剪切数据用的。cut是以每一行为一个处理对象的,这种机制和sed是一样的。
cut -d'分隔字元' -f fields
关于cut的命令参数∶
-f ∶依据 -d 的分隔字元将一段讯息分割成为数段,用 -f 取出第几段的意思;
-c ∶以字元 (characters) 的单位取出固定字元区间;
'\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同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。
该命令各选项含义如下:
- l 统计行数。
- w 统计字数。
wc –l统计输出的行数,即是符合条件的用户数
- 按文件大小的降序列出目录中的所有文件
解决方法:
ls -l | sort -nrk 5
ls 命令经常要使用,通过使用 ls 命令可以查看linux文件夹包含的文件,查看文件权限(包括目录、文件夹、文件权限),查看目录信息等等,ls 命令在平常的linux操作中使用很频繁,所以这里介绍下 ls 命令的相关使用方法。
-l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来。
-r 将目录的内容清单以英文字母顺序的逆序显示。
-t 按文件修改时间进行排序,而不是按文件名进行排序。
Sort命令的功能是对文件中的各行进行排序。Sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上,Sort命令可以被认为是一个非常强大的数据管理工具,用来管理内容类似数据库记录的文件。
-nrk 5 即是按照数字方式倒序排序,根据文件属性的第5列即是文件大小排序

浙公网安备 33010602011771号