Shell文本处理(一)

Shell文本处理一

      • 1、cat指令
      • 2、find指令
      • 3、grep指令
      • 4、awk指令
      • 5、sed命令




文本处理是Shell中的一个重要领域,它允许你从文本数据中提取有用的信息,执行搜索、替换、格式化和过滤等操作。这对于日志分析、数据清洗、配置文件管理等任务非常有用

Shell中常用的文本处理工具有:catfindgrepsedawksortuniqtrcutpastewc

1、cat指令


cat(Concatenate)指令主要用于查看文件内容或将多个文件连接并打印到标准输出设备上

cat指令的功能包括但不限于:

  • 查看文件内容cat file将指定文件的内容输出到终端上
  • 连接/合并文件cat file1 file2file1file2的内容连接起来,并将结果输出到终端上

cat指令的语法格式如下:

cat [选项] 文件列表

常用选项如下:

  • -n:显示行号(在输出的每行前面添加行号)
  • -b:显示行号(只在非空行前面添加行号)
  • -s:当有多个连续空行时,只显示一个空行

以下是一些示例:

# 显示文件内容,并在每行前面添加行号
cat -n file.txt
# 将file1和file2的内容合并输出到file3中
cat file1.txt file2.txt > file3.txt

2、find指令


find指令主要用于在指定目录下递归查找文件和目录,它可以使用不同的选项来过滤和限制查找结果

find指令的语法格式如下:

find [路径] [选项] [动作]
  • 路径:要查找的目录路径,多个路径之间用空格分隔,默认为当前目录
  • 选项:常用选项及其匹配条件如下:
    • -name pattern:按文件名查找,支持使用通配符*?
    • -type type:按类型查找,包括f(普通文件)、d(目录)等
    • -size size:按文件大小查找,+/-表示大于或小于指定大小,单位包括k(KB)、M(MB)或 G(GB)等
    • -perm perm:按权限查找,例如755权限
  • 动作:筛选匹配到的文件执行过的操作,例如n分钟内被修改过

以下是一些示例:

# 按类型查找:递归查找指定目录下的所有文件
find 目录 -type f
# 按文件名查找:递归查找指定目录下的所有.txt文件
find 目录 -type f -name "*.txt"
# 按文件大小查找:递归查找指定目录下大于1M的文件(小于1M:-1M,等于1M:1M)
find 目录 -type f -size +1M
# 按权限查找:递归查找指定目录下755权限的文件
find 目录 -type f -perm 755

3、grep指令


grep(Global Regular Expression Print)指令是一个强大的文本搜索工具,它可以使用正则表达式来搜索匹配的行

grep指令的语法格式如下:

grep [选项] pattern 文件列表
  • pattern:要查找的字符串或正则表达式
  • 选项:常用选项如下:
    • -o:打印只匹配pattern的部分,而非整行
    • -v:反向查找,打印不匹配pattern的所有行
    • -E:使用扩展正则表达式(同egrep指令),打印匹配pattern的整行
    • -i:忽略大小写进行匹配,打印匹配pattern的整行
    • -n:打印匹配pattern的整行及其所在行号
    • -r:递归查找子目录下文件中匹配pattern的整行
    • -l:仅打印匹配pattern的文件名
    • -c:仅打印匹配pattern的行数
    • -A2:打印匹配pattern的整行及后2行
    • -B2:打印匹配pattern的整行及前2行
    • -C2:打印匹配pattern的整行及上下2行

以下是一些示例:

# 打印file.txt中包含pattern的行
grep "pattern" file.txt
# 只打印匹配pattern正则表达式的部分
grep -oE "pattern" file.txt

4、awk指令


awk是一种强大的文本处理语言,它可以分析和处理文本中的字段和记录。awk来源于它的三个设计者的名字首字母缩写

awk指令的语法格式如下:

awk [选项] 'pattern {动作}' [文件]
  • pattern:筛选匹配pattern的数据,默认对所有行进行操作
  • {动作}:流处理(读一行处理一行),在匹配的行上执行动作,默认动作为打印整行
  • 选项:常用选项如下:
    • -F<分隔符>:指定输入行的分隔符,默认为空格

awk常用内置变量有:

  • $0:当前整行
  • $1:当前行第一列,$2当前行第二列,依此类推
  • NF:列数,对应当前行字段数
  • NR:行数,对应当前行号

以下是一些示例:

# 打印文件中每一行的第一列和第二列(按下划线分隔)
awk -F_ '{print $1, $2}' file.txt
# 打印文件中每一行的第一列(按多个分隔符分隔)
awk -F[_:] '{print $1}' file.txt
# 打印匹配pattern正则表达式的行(单独正则需要使用//包裹)(按空格分隔)
awk '/pattern/ {print $0}' file.txt
# 打印匹配pattern1或pattern2正则表达式的行(按下划线分隔)
awk -F_ '/pattern1/ || /pattern2/ {print $O}' file.txt
# 打印第一列等于2且第二列匹配正则的行
awk '$1==2 && $2 ~ /^a/ {print $0}' file.txt
# 打印第二列不匹配正则的值
awk '$2 !~ /^a/ {print $2}' file.txt

5、sed命令


你可能感兴趣的:(Linux,#,Shell,linux,shell)