Linux命令 - awk、sed、grep

一、awk

  awk 是一种用于文本处理的强大的命令行工具,它逐行扫描文件、以字段为单位分析数据、执行操作并输出结果。awk 可以根据指定的模式和动作来处理文本文件的内容,通常用于数据提取、格式化、转换和报告生成等任务。

基本语法:

awk 'pattern { action }' filename
  • pattern 是一个条件或模式,用于筛选数据行。
  • action 是要对匹配模式的行执行的操作。

常见选项:

  • -F separator: 指定字段分隔符。例如,-F',' 表示使用逗号作为字段分隔符。

常见用法:

  1. 打印特定列:

    awk '{print $2}' filename

    这将打印文件中所有行的第二列内容。

  2. 条件筛选数据:

    awk '$2 >= 80 {print $1 " " $2}' filename

    这个命令使用逗号作为字段分隔符,然后根据第二列的数值条件,打印符合条件的学生姓名和成绩。

  3. 计算行数:

    awk 'END {print NR}' filename

    NRawk 的内置变量,表示已读取的行数。

  4. 自定义输出格式:

    awk '{printf "Name: %-10s Age: %s\n", $1, $2}' filename

    这个命令将按照自定义的格式打印每行的第一列和第二列内容。

  5. 使用条件进行操作:

    awk '{ if ($3 > 50) print $1 " passed"; else print $1 " failed" }' filename

    在这个例子中,如果第三列的值大于50,就输出"passed",否则输出"failed"。

  6. 使用函数:

    awk '{ total += $2 } END {print "Average: " total/NR}' filename

    这个例子计算第二列的平均值,并在文件结束时输出结果。

  awk 还可以执行更复杂的操作,包括循环、条件语句和函数等,使其成为一个强大的文本处理工具。语法更复杂的 awk 命令可以通过在单引号内编写更多的 awk 脚本来实现。

二、sed

  sed(Stream Editor)是一个强大的文本处理工具,用于在Unix和Linux环境中进行文本处理和编辑。它允许用户执行文本转换操作,包括替换、删除、插入和编辑文本文件的内容。以下是 sed 命令的基本语法和一些常见用法:

基本语法:

sed [选项] '脚本' 文件
  • 选项:是一些可选参数,用于控制 sed 命令的行为。
  • '脚本':是包含 sed 命令的脚本,脚本可以包含一个或多个 sed 命令。
  • 文件:是要处理的文本文件的名称。

常见选项:

  • -i:直接在原文件上进行编辑,即原文件会被修改。
  • -e:允许在命令行中指定多个 sed 命令。
  • -n:禁止默认输出,只输出经过 sed 处理后的文本。
  • -r:使用扩展正则表达式,可以使用更多的正则表达式元字符。

动作说明:

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
  • s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g 就是啦!

常见用法:

  1. 替换文本

    sed 's/old_pattern/new_pattern/' filename

    这将在文件中查找 old_pattern 并将其替换为 new_pattern

  2. 删除行

    sed '/pattern/d' filename

    这将删除包含 pattern 的行。

  3. 插入行

    sed '3i\inserted_line' filename

    这将在第3行之前插入一行 inserted_line

  4. 替换指定行

    sed '2s/old_pattern/new_pattern/' filename

    这将在第2行中查找 old_pattern 并将其替换为 new_pattern

  5. 多个操作

    sed -e 's/old_pattern/new_pattern/' -e '3d' filename

    这将依次执行两个操作:首先替换 old_patternnew_pattern,然后删除第3行。

  6. 使用扩展正则表达式

    sed -r 's/regex_pattern/new_pattern/' filename

    这使用扩展正则表达式进行替换。

  7. 将修改直接应用到文件

    sed -i 's/old_pattern/new_pattern/' filename

    这将在原文件上进行编辑,替换操作将直接应用到文件中。

        sed 是一个非常有用的文本处理工具,它可以在批量处理文本文件、日志文件、配置文件等方面发挥重要作用。记住在使用 -i 选项时要小心,因为它会直接修改文件内容。

三、grep

  grep 是一个强大的用于在文本中搜索指定模式的命令行工具。它通常用于在文件中查找包含特定文本的行,或者在管道中过滤符合特定模式的输出。

基本用法:

grep [选项] 模式 文件
  • 模式:是你要搜索的文本模式,可以是一个单词、一段文字,也可以是一个正则表达式。
  • 文件:是你要在其中搜索的文件名。

常用选项:

  • -i:忽略大小写,即不区分大小写地搜索。
  • -r 或 --recursive:递归搜索子目录。
  • -n:显示匹配行的行号。
  • -v:反转匹配,显示不匹配的行。
  • -l:只列出包含匹配项的文件名,而不显示匹配的具体行。
  • -c:只显示匹配的行数,而不显示具体的行内容。
  • -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
  • -f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
  • -w:匹配整个单词,而不是部分匹配。
  • -A-B-C:显示匹配行的前后若干行,分别表示after、before、context。
  • -E 或 --extended-regexp:使用扩展正则表达式(支持更多的正则表达式元字符)。
  • -F 或 --fixed-strings:将模式视为固定字符串,而不是正则表达式。

示例:

  1. 在文件中搜索指定模式:

    grep "pattern" filename
  2. 递归搜索子目录

    grep -r "pattern" directory
  3. 忽略大小写

    grep -i "pattern" filename
  4. 显示匹配行的行号

    grep -n "pattern" filename
  5. 反转匹配,显示不匹配的行

    grep -v "pattern" filename
  6. 只列出包含匹配项的文件名

    grep -l "pattern" filename
  7. 只显示匹配的行数

    grep -c "pattern" filename
  8. 匹配整个单词

    grep -w "word" filename
  9. 使用扩展正则表达式

    grep -E "pattern" filename
  10. 将模式视为固定字符串

    grep -E "pattern" filename

  grep 是一个强大的文本搜索工具,它支持正则表达式和简单的字符串匹配,使其成为处理文本数据和日志文件等任务的重要工具。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值