Linux Shell编程入门(二)-grep、sed、awk

文摘   2025-01-07 23:58   广东  

学而时习之

本文描述 Shell编程中关于文本处理的命令,如grepsedawk

  1. grep

  • grep 是一个文本搜索工具,用于搜索文件中的行,这些行匹配一个或多个正则表达式。

  • 它快速、灵活,是文本搜索的标准工具。

  • grep 支持多种选项,如忽略大小写、递归搜索目录、使用正则表达式等。

  • 常用于快速查找文件中包含特定文本的行。


  • sed

    1. sed(Stream Editor)是一个流编辑器,用于对文本数据进行过滤和转换。

    2. 它按照指定的模式执行编辑命令,如插入、删除、替换和转换。

    3. sed 脚本可以非常简洁,适合进行简单的文本替换和模式匹配。

    4. 常用于自动化文本编辑任务。



  • awk

    1. awk 是一个强大的文本处理工具,特别适合用来处理结构化数据,如表格数据。

    2. 它能够读取文件,并对数据进行模式扫描和处理。

    3. awk 支持复杂的条件语句、循环、数组等编程结构。

    4. 常用于数据的提取、排序、计算等。


  • grep 命令简介

    grep 是 Linux 系统中一个非常强大的文本搜索工具,它能够快速地在文件中搜索指定的字符串或模式,并输出匹配的行。grep 是 "Global Regular Expression Print" 的缩写,意味着全局正则表达式打印。

    语法结构

    grep [OPTIONS] PATTERN [FILE...]

    • OPTIONS:可选的命令行选项。

    • PATTERN:要搜索的模式,可以是简单的字符串或复杂的正则表达式。

    • FILE:要搜索的文件或目录,如果不指定文件,默认为标准输入。

    常用选项

    • -i:忽略大小写差异,使得搜索不区分大小写。

    • -v:显示不包含匹配文本的行。

    • -n:显示匹配行的行号。

    • -c:仅显示匹配行的数量,不显示行内容。

    • -r 或 -R:递归地在指定目录下的所有文件中搜索。

    • -e:允许同时搜索多个模式。

    • -l:仅显示包含匹配文本的文件名。

    • --color=auto:将匹配的文本以彩色显示,便于区分。

    示例

    • 搜索单个文件中的字符串

      grep"hello" file.txt

    • 搜索多个文件中的字符串

      grep"hello" file1.txt file2.txt

    • 同时搜索多个模式

      grep -e "hello" -e "world" file.txt

    • 显示匹配行号

      grep -n "hello" file.txt

    • 显示不匹配的行

      grep -v "hello" file.txt

    • 递归搜索目录中的字符串

      grep -r "hello" directory/

    • 只显示包含匹配文本的文件名

      grep -l "hello" directory/

    • 统计匹配的行数

      grep -c "hello" file.txt

    • 使用正则表达式搜索(假设 PATTERN 是一个正则表达式):

      grep -E "regexp" file.txt

    • 高亮显示匹配的文本

      grep --color=auto "hello" file.txt

    grep 命令非常灵活,可以通过结合使用不同的选项和正则表达式来执行复杂的文本搜索任务。

    掌握 grep 命令对于处理和分析文本数据非常有帮助。



    sed 命令简介

    sed(Stream Editor)是一种流编辑器,用于执行基本的文本转换。它读取输入的文本(文件或者标准输入),按照指定的指令执行操作,并将结果输出到标准输出(或者文件)。

    语法结构

    sed [OPTIONS] 'COMMANDS' [FILE...]

    • OPTIONS:可选的命令行选项。

    • COMMANDS:要执行的 sed 命令序列,通常用单引号括起来。

    • FILE:要处理的文件或文件列表,如果不指定,sed 会从标准输入读取。

    常用命令

    • s:替换指定模式。

    • d:删除指定行。

    • i:在指定行前插入文本。

    • c:替换指定行。

    • y:字符转换。

    • p:打印行。

    • a:在指定行后追加文本。

    • q:退出 sed

    选项

    • -i:直接修改文件,而不是输出到标准输出。

    • -n:仅打印经过 sed 命令处理的行。

    • -e:执行一个 sed 命令脚本。

    示例

    • 替换文件中的指定字符串

      sed's/hello/world/' file.txt

    • 删除文件中的指定行

      sed'3d' file.txt

    • 在文件中指定行后插入指定字符串

      sed'2i\hello world' file.txt

    • 替换文件中指定行的内容

      sed'3c\hello world' file.txt

    • 在文件中指定行后追加文本

      sed'2a\
      This is a new line added after line 2\
      ' file.txt

    • 打印文件中匹配的行

      sed -n '/world/p' file.txt

    • 字符转换

      sed'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' file.txt

    • 使用正则表达式进行替换

      sed's/[0-9]/& /g' file.txt  # 将数字后添加空格

    • 使用模式匹配进行删除

      sed'/^$/d' file.txt  # 删除空行

    • 直接修改文件

      sed -i 's/old/new/' file.txt

    • 多命令执行

      sed -e 's/old/new/' -e 's/yes/no/' file.txt

    • 打印不匹配的行

      sed -n '/old/!p' file.txt


    sed 是一个功能强大的文本处理工具,它不仅可以用于简单的文本替换和删除,还可以通过编写复杂的脚本来执行更高级的文本处理任务。

    掌握 sed 命令对于自动化文本编辑和数据清洗非常有用。


    awk 命令简介

    awk 是一种强大的文本处理工具,它不仅能够格式化和过滤文本数据,还能进行复杂的计算和数据处理。awk 的名称来源于其作者 Alfred V. Aho、Peter J. Weinberger 和 Brian W. Kernighan 的姓氏首字母。

    语法结构

    awk [OPTIONS] 'PROGRAM' [FILE...]

    • OPTIONS:可选的命令行选项。

    • PROGRAMawk 程序,包含模式和要执行的动作,通常用单引号括起来。

    • FILE:要处理的文件或文件列表,如果不指定,awk 会从标准输入读取。

    常用选项

    • -F:设置输入字段分隔符。

    • -v:向 awk 程序传递外部变量。

    • --field-separators:设置字段分隔符。

    • --record-separators:设置记录分隔符。

    基本元素

    • PATTERN:可以是特定的文本、正则表达式或空(表示所有记录)。

    • ACTION:当模式匹配时执行的命令或代码块。

    示例

    • 打印文件中的所有行

      awk'{print}' file.txt

    • 打印文件中第二列的内容

      awk'{print $2}' file.txt

    • 计算文件中所有数字的总和

      awk'{sum += $1} END {print sum}' file.txt

    • 打印文件中包含指定字符串的行

      awk'/hello/ {print}' file.txt

    • 在文件中指定列后面添加指定字符串

      awk'{$3 = $3 "hello"} {print}' file.txt

    • 使用字段分隔符

      awk -F":"'{print $1}' /etc/passwd

    • 条件判断

      awk'{if ($1 > 100) print $0}' file.txt

    • 循环结构

      awk'{for (i = 1; i <= NF; i++) print $i}' file.txt

    • 格式化输出

      awk'{printf "%-15s %-10s\n", $1, $2}' file.txt

    • 使用外部变量

      awk -v var="value"'{print var}' file.txt

    • 多模式匹配

      awk'/pattern1/,/pattern2/' file.txt

    • 自定义函数

      awk'{func()} {print} function func() {print "This is a custom function"}'

    • 处理多个文件

      awk'{...}' file1.txt file2.txt

    awk 的强大之处在于其内置的变量、控制流语句和函数,这使得它能够处理复杂的文本和数据。

    通过编写 awk 脚本,用户可以轻松实现数据的提取、转换和报告生成。


    其他的文本处理命令:uniqsort 、tr 、cut、tee等


    前文回顾:

    Linux Shell编程入门(一)


    后续计划更新的内容

    1. 正则表达式:了解正则表达式的基本概念,因为它们在文本处理中非常有用。

    2. 调试技巧:学习如何使用set -x进行调试,以及如何通过查看错误消息来解决问题。

    3. 脚本优化:了解如何编写高效、可读性强的脚本。

    4. 安全最佳实践:学习如何编写安全的脚本,避免常见的安全漏洞。

    5. Shell 脚本的调试和测试:学习如何测试和调试你的脚本,确保它们按预期工作。

    6. Shell 脚本的维护:了解如何维护和更新你的脚本,使其能够适应环境的变化。


    小叶来滴茶
    杰哥写字的地方:个人工作、生活的总结思考、顿悟的记录。
     最新文章