0%
这是一片思考的空间 -- arthinking
Spring 重构&代码整洁之道 软件设计 JVM 并发编程 数据结构与算法 分布式 存储 网络 微服务 设计模式
Java技术栈 - 涉及Java技术体系

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

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内容如下:This is what I meant. 删除HTML标记,也就是要得到:This is what I meant.

解决方法:

cat myfile.html| sed 's///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宅
内功修炼
Java技术栈
Java架构杂谈是IT宅精品文章公众号,欢迎订阅:
📄 网络基础知识:两万字长文50+张趣图带你领悟网络编程的内功心法 📄 HTTP发展史:三万长文50+趣图带你领悟web编程的内功心法 📄 HTTP/1.1:可扩展,可靠性,请求应答,无状态,明文传输 📄 HTTP/1.1报文详解:Method,URI,URL,消息头,消息体,状态行 📄 HTTP常用请求头大揭秘 📄 HTTPS:网络安全攻坚战 📄 HTTP/2:网络安全传输的快车道 📄 HTTP/3:让传输效率再一次起飞 📄 高性能网络编程:图解Socket核心内幕以及五大IO模型 📄 高性能网络编程:三分钟短文快速了解信号驱动式IO 📄 高性能网络编程:彻底弄懂IO复用 - IO处理杀手锏,带您深入了解select,poll,epoll 📄 高性能网络编程:异步IO:新时代的IO处理利器 📄 高性能网络编程:网络编程范式 - 高性能服务器就这么回事 📄 高性能网络编程:性能追击 - 万字长文30+图揭秘8大主流服务器程序线程模型
📄 Java内存模型:如果有人给你撕逼Java内存模型,就把这些问题甩给他 📄 一文带你彻底理解同步和锁的本质(干货) 📄 AQS与并发包中锁的通用实现 📄 ReentrantLock介绍与使用 📄 ReentrantReadWriteLock介绍与使用 📄 ReentrantLock的Condition原理解析 📄 如何优雅的中断线程 📄 如何优雅的挂起线程 📄 图解几个好玩的并发辅助工具类 📄 图解BlockingQueue阻塞队列
📄 消息队列那么多,为什么建议深入了解下RabbitMQ? 📄 高并发异步解耦利器:RocketMQ究竟强在哪里? 📄 Kafka必知必会18问:30+图带您看透Kafka
📄 洞悉MySQL底层架构:游走在缓冲与磁盘之间 📄 SQL运行内幕:从执行原理看调优的本质 📄 洞悉Redis技术内幕:缓存,数据结构,并发,集群与算法