Linux 基础-文本处理命令

简介: Linux 基础-文本处理命令

概述

Linux 下使用 Shell 处理文本时最常用的工具有: find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk

find 文件查找

man 文档给出的 find 命令的一般形式为:

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]
复制代码

这对于大部分人来说都太复杂了,[-H] [-L] [-P] [-D debugopts] [-Olevel] 这几个选项并不常用,find 命令的常用形式可以简化为:

$ find [PATH] [option] [action]
复制代码

1,根据文件或者正则表达式进行匹配

$ find .  # 查找当前目录及子目录下所有文件及文件夹
$ find /data -name "*.txt"  # 在 /data 目录及子目录下查找以 .txt 结尾的文件名
$ find . \( -name "*.txt" -o -name "*.pdf" \)  # 当前目录及子目录下查找所有以 .txt 和 .pdf 结尾的文件
$ find . -maxdepth 1 -type d  # 查找当前目录下所有的子目录
$ find . -maxdepth 1 -regex ".*\.txt$"  # 基于正则表达式匹配当前目录下的所有以 .txt 结尾的文件
./multi_classifynet_infer_ret.txt
./cali_left_img.txt
... 省略
复制代码

2,根据文件类型进行搜索

find . -type 类型参数,f 普通文件,l 符号连接,d 目录,c 字符设备,b 块设备,s 套接字,p Fifo
$ find . -maxdepth 1 -type d  # 查找当前目录下的所有子目录
复制代码

3,基于目录深度搜索

$ find . maxdepth 3 -type f  # 目录向下最大深度限制 3
复制代码

4,根据文件时间戳进行搜索find . -type -f 时间戳参数。与时间有关的选项:共有 -atime, -ctime-mtime,以 -mtime 说明

  • -mtime n : n 为数字,意义为在 n 天之前的『一天之内』被更改过内容的文件;
  • -mtime +n :列出在 n 天之前(不含 n 天本身)被更改过内容的文件名;
  • -mtime -n :列出在 n 天之内(含 n 天本身)被更改过内容的文件名。
  • -newer file : file 为一个存在的文件,列出比 file 还要新的文件名
$ find /etc -newer /etc/passwd  # 寻找 /etc 底下的文件,如果文件日期比 /etc/passwd 新就列出
复制代码

5,与文件权限及名称有关的参数

  • -name filename:搜寻文件名为 filename 的文件。
  • -size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。 这个 SIZE 的规格有:c: 代表 byte, k: 代表 1024 bytes。所以,要找比 50KB还要大的文件,就是 -size +50k
  • -type TYPE:搜寻文件的类型为 TYPE 的, 类型主要有:一般正规文件 (f), 装置文件 (b, c), 目录 (d), 连结档 (l), socket (s), 及 FIFO (p) 等属性。
  • -perm mode:搜寻文件权限『刚好等于』 mode 的文件, 这个 mode 为类似 chmod 的属性值, 举例来说, -rwxr-xr-x 的属性为 755
  • -perm -mode:搜寻文件权限『必须要全部囊括 mode 的权限』的文件, 举例来说,我们要搜寻 -rwxr--r--,亦即 744 的文件,使用 -perm -744,但是当一个文件的权限为 -rwxr-xr-x ,亦即 755 时,也会被列出来,因为 -rwxr-xr-x 的属性已经包括了 -rwxr--r-- 的属性了。
  • -perm /mode:搜寻文件权限『包含任一 mode 的权限』的文件, 举例来说,我们搜寻 -rwxr-xr-x ,亦即 -perm /755 时,但一个文件属性为 -rw-------也会被列出来,因为他有 -rw.... 的属性存在。
范例:
```shell
root@17c30d837aba:/data# find . -maxdepth 1 -perm 777  # 查找当前目录下文件权限刚好等于777 的文件
.
./honggaozhang
./demo.sh
复制代码

grep 文本搜索

grep 支持使用正则表达式搜索文本,并把匹配的行打印出来。grep 命令常见用法,在文件中搜索一个单词,命令会返回一个包含 “match_pattern” 的文本行:

grep match_pattern file_name
grep "match_pattern" file_name
复制代码

常用参数

  • -o:只输出匹配的文本行,-v 只输出没有匹配的文本行
  • -c:统计文件中包含文本的次数: `grep -c “text” filename
  • -n:打印匹配的行号
  • -i:搜索时忽略大小写
  • -l:只打印文件名
$ grep "class" . -R -n  # 在多级目录中对文本递归搜索(程序员搜代码的最爱)
$ grep -e "class" -e "vitural" file  #  匹配多个模式
复制代码

参考资料


相关文章
|
11天前
|
Linux 网络安全 Python
linux后台运行命令screen的使用
linux后台运行命令screen的使用
45 2
linux后台运行命令screen的使用
|
11天前
|
Ubuntu Linux
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
117 3
|
17天前
|
存储 监控 安全
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
|
6天前
|
机器学习/深度学习 安全 网络协议
Linux防火墙iptables命令管理入门
本文介绍了关于Linux防火墙iptables命令管理入门的教程,涵盖了iptables的基本概念、语法格式、常用参数、基础查询操作以及链和规则管理等内容。
163 73
|
7天前
|
机器学习/深度学习 Linux Perl
Linux文本处理三剑客之sed详解
这篇博客详细讲解了Linux中的文本处理工具sed的使用方法和常用命令。
28 9
Linux文本处理三剑客之sed详解
|
5天前
|
Linux 应用服务中间件 nginx
|
5天前
|
Ubuntu Linux Shell
Linux系统命令 安装和文件相关命令
本文档详细介绍了Linux系统中的常用命令,包括软件安装卸载命令如`dpkg`和`apt-get`,压缩与解压命令如`gzip`、`bzip2`和`xz`,以及`tar`命令用于打包和解包。此外还介绍了文件分割命令`split`,文件操作命令如`cat`、`head`、`tail`、`more`、`less`等,管道命令和`wc`、`grep`、`find`、`cut`、`sort`、`uniq`、`diff`等实用工具。最后,文档还讲解了文件属性相关的命令如`chmod`、`chown`、`chgrp`以及创建硬链接和软链接的`ln`命令。
|
5天前
|
Linux Shell 网络安全
Linux 用户管理命令
本文详细介绍了Linux系统中的各类常用命令,包括用户管理(如`adduser`, `usermod`, `passwd`等)、系统操作(如关机、重启、注销)、磁盘管理(如`df`, `mkfs`, `mount`)及网络管理(如`ifconfig`, `ping`, `ssh`)等。通过具体示例展示了每个命令的基本用法和应用场景,帮助用户更好地理解和掌握Linux系统的管理和操作技巧。
|
5天前
|
存储 Ubuntu Linux
linux中的find 命令详细用法
本文介绍了如何将 `find` 命令与 `exec` 结合使用,通过具体示例展示了多种应用场景,如显示文件属性、重命名文件、收集文件大小、删除特定文件、执行工具、更改文件所有权和权限、收集 MD5 值等。文章还探讨了 `{} \;` 和 `{} +` 的区别,并演示了如何结合 `grep` 命令进行内容搜索。最后,介绍了如何在一个 `find` 命令中使用多个 `exec` 命令。这为 Linux 用户提供了强大的文件管理和自动化工具。
|
5天前
|
Shell Linux API
C语言在linux环境下执行终端命令
本文介绍了在Linux环境下使用C语言执行终端命令的方法。首先,文章描述了`system()`函数,其可以直接执行shell命令并返回结果。接着介绍了更强大的`popen()`函数,它允许程序与命令行命令交互,并详细说明了如何使用此函数及其配套的`pclose()`函数。此外,还讲解了`fork()`和`exec`系列函数,前者创建新进程,后者替换当前进程执行文件。最后,对比了`system()`与`exec`系列函数的区别,并针对不同场景推荐了合适的函数选择。