博客
关于我
linux正则表达式 grep egrep用法
阅读量:796 次
发布时间:2023-02-04

本文共 2561 字,大约阅读时间需要 8 分钟。

shell命令执行的相应顺序

在shell脚本编写中,命令的执行顺序至关重要。shell提供了两种主要的控制命令执行顺序的符号:逗号( )和竖线(|)。以下是它们的作用和使用方法。

1. 逗号( )的使用

逗号用于同时执行命令列表。如果左边的命令成功执行,右边的命令才会继续执行。命令的布局如下:

命令1   命令2   ...

示例

mv myfile myfile2   echo "如果你看到这条消息,说明mv命令成功了!"
  • 说明:如果mv myfile myfile2命令成功执行,执行完毕后,shell会继续执行echo "如果你看到这条消息,说明mv命令成功了!"命令。
  • 失败情况:如果mv myfile myfile2命令失败,整个命令链会停止,且不会执行后续命令。

实际应用示例

从一个审计文件中抽取第1个和第2个域,并将其输出到一个临时文件中,如果这一操作未成功,我希望能够收到一个相应邮件:

awk '{print$1,$2}' test3 > test2 || echo "抱歉提取失败" | mail root
  • 说明:如果awk '{print$1,$2}' test3 > test2命令成功,结果会被保存到test2文件中。
  • 失败情况:如果awk '{print$1,$2}' test3 > test2命令未能成功,shell会执行echo "抱歉提取失败" | mail root,向root用户发送一封提醒邮件。

2. 竖线(|)的使用

竖线用于指定命令的顺序,左边的命令失败时,右边的命令才会执行。命令的布局如下:

命令1 || 命令2 || ...

示例

mv myfile myfile2 || echo "如果mv命令失败,执行此命令"
  • 说明:如果mv myfile myfile2命令成功,echo "如果mv命令失败,执行此命令"不会被执行。
  • 失败情况:如果mv myfile myfile2命令失败,echo "如果mv命令失败,执行此命令"会被执行。

3. 命令替换 { } 的使用

在shell中,{ }可以用来包裹命令,启动子shell。子shell的执行环境独立于当前shell,只有在所有命令的输出作为整体重定向时,子shell才会被执行。命令的布局如下:

命令1 && (子命令1 ; 子命令2) || (子命令3 ; 子命令4)

示例

test_sorted && (cp test_sorted test_sorted_bak ; lp test_sorted)
  • 说明test_sorted命令执行成功后,启动子shell,执行cp test_sorted test_sorted_baklp test_sorted命令。
  • 失败情况:如果test_sorted命令失败,整个命令链会停止,无需执行子命令。

4. 正则表达式的高级使用

grep命令是处理文本数据的强大工具,支持使用正则表达式匹配文本。以下是一些常用的正则表达式示例:

行首或行尾匹配

  • 行首:^
  • 行尾:$

示例

  • 匹配以the开头的行:
    grep '^the' file
  • 匹配以the结尾的行:
    grep 'the$' file

单词匹配

  • 匹配包含signaSigna的单词:
    grep '[sS]igna[lL]' file

日期格式匹配

  • 匹配日期格式dd-mmm-yyyy
    grep '[0-9]{2}-[0-9]{3}-[0-9]{4}' date.log

高级匹配选项

grep命令提供了多种高级选项,常用于优化匹配结果:

  • -c:只输出匹配行的计数。
  • -i:忽略大小写(仅适用于单字符匹配)。
  • -n:显示匹配行及行号。
  • -s:不显示不存在或无匹配文本的错误信息。
  • -v:显示不包含匹配文本的所有行。

示例

  • 忽略大小写匹配“code”:
    grep -in "code" file
  • 多次过滤:
    grep -in "code" file | grep "02"

扩展模式匹配

使用-E参数可以使用扩展模式。例如,匹配“219”或“216”:

grep -E '219|216' tab2

5. 常用的grep选项

  • -c:只输出匹配行的计数。
  • -i:不区分大小写(仅适用于单字符匹配)。
  • -h:查询多文件时不显示文件名。
  • -l:查询多文件时只输出包含匹配字符的文件名。
  • -n:显示匹配行及行号。
  • -s:不显示不存在或无匹配文本的错误信息。
  • -v:显示不包含匹配文本的所有行。

示例

  • 查询包含“Sort”但不包含“Sort”的文件:

    grep -v "Sort" tab2
  • 忽略大小写匹配“Sort”:

    grep -in "Sort" tab2
  • 只输出匹配行的计数:

    grep -c "Sort" tab2
  • 精确匹配“01”:

    grep "01" test.log
  • 忽略大小写匹配“code”或“02”:

    grep -in "code" tab2 | grep "02"

6. 追踪正在运行的进程

要查看DNS服务器是否正在运行,可以使用以下命令:

ps -ef | grep "name" | grep -v "grep"
  • 解释ps -ef显示系统进程,grep "name"筛选出名为“name”的进程,grep -v "grep"排除自身进程。

7. 使用egrep进行高级匹配

egrep(扩展grep)支持使用类名进行匹配,例如:

  • 匹配包含空格或tab键的单词:

    egrep '[ :space: ]|tab' file
  • 匹配包含数字或字母的单词:

    egrep '[0-9A-Za-z]' file
  • 匹配带有句点和两个数字的行:

    egrep "^.*\.[0-9][0-9]" file
  • 匹配日期格式dd-mmm-yyyy

    egrep '[0-9]{2}-[0-9]{3}-[0-9]{4}' date.log
  • 匹配包含devDev的单词:

    egrep '[dD]ev' file

8. 结论

通过合理使用逗号、竖线、{ }和正则表达式,可以有效地控制命令的执行顺序和匹配文本。这些技巧在日常的系统管理和数据处理中非常有用,能够帮助用户更高效地完成任务。

转载地址:http://zskfk.baihongyu.com/

你可能感兴趣的文章
Linux网络配置与故障排除
查看>>
linux脚本执行报错:坏的解释器: 没有那个文件或目录
查看>>
Linux自主访问控制——有效ID与真实ID
查看>>
linux自动运行u盘上的脚本,脚本实现U盘自动挂载(linux)
查看>>
Linux自学笔记——openssh
查看>>
Linux自定义开机启动服务和chkconfig使用方法
查看>>
linux英英词典项目,五大主流英英词典(ESL)比较使用测评报告
查看>>
linux获取文件所在目录下,Linux_在Linux系统中获得文件所在目录名的方法,方式一:使用“ dirname“ - phpStudy...
查看>>
linux菜单无法编辑,gvim在linux下菜单无法显示问题
查看>>
Linux虚拟化网络之vlan配置实战
查看>>
Linux虚拟化网络之路由转发实战
查看>>
Linux虚拟化网络之链路聚合实战
查看>>
Linux虚拟机NAT模式设置静态IP并且能上网的设置方法
查看>>
Linux虚拟机上安装redis
查看>>
linux虚拟机配置静态网络,解决centos7网络异常,ping不通
查看>>
Linux虚拟网络设备—Veth Pair
查看>>
linux解压缩命令之unzip,tar(持续更新)
查看>>
linux解析core文件都是问号,gdb core文件函数出现问号
查看>>
linux设备共享,Linux中的存储设备共享之target
查看>>
Linux设备模型(5)_device和device driver
查看>>