
linux正则表达式 grep egrep用法
1. 逗号(
2. 竖线(
3. 命令替换
发布日期:2025-04-09 18:17:35
浏览次数:11
分类:精选文章
本文共 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_bak
和lp test_sorted
命令。 - 失败情况:如果
test_sorted
命令失败,整个命令链会停止,无需执行子命令。
4. 正则表达式的高级使用
grep命令是处理文本数据的强大工具,支持使用正则表达式匹配文本。以下是一些常用的正则表达式示例:
行首或行尾匹配
- 行首:
^
- 行尾:$
示例
- 匹配以
the
开头的行:grep '^the' file
- 匹配以
the
结尾的行:grep 'the$' file
单词匹配
- 匹配包含
signa
或Signa
的单词: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
匹配包含
dev
或Dev
的单词:egrep '[dD]ev' file
8. 结论
通过合理使用逗号、竖线、{ }
和正则表达式,可以有效地控制命令的执行顺序和匹配文本。这些技巧在日常的系统管理和数据处理中非常有用,能够帮助用户更高效地完成任务。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月25日 16时15分38秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
linux常用命令合集及常用工具指令集
2023-02-04
Linux常用命令总结
2023-02-04
Linux常用命令汇总
2023-02-04
Linux常用命令详解与示例
2023-02-04
linux常用命令:cal 命令
2023-02-04
Linux常用命令:touch
2023-02-04
Linux常用嗅探工具(1):fping命令
2023-02-04
linux常用基本命令
2023-02-04
linux常用快捷键
2023-02-04
Linux常用的网络命令有哪些?快速入门!
2023-02-04
linux常见命令
2023-02-04
linux常见操作命令及操作符意思
2023-02-04
Linux常见操作命令整理
2023-02-04
Linux平台安装mongoDB、配置及端口开启
2023-02-04
linux库列表
2023-02-04
linux开启nscd服务缓存加速-DNS缓存
2023-02-04
Linux开放的端口太多了?教你一招找出所有开放的端口,然后直接干掉!
2023-02-04
Linux开机启动、利用crontab实现开机启动某个程序
2023-02-04
linux开机启动脚本制作
2023-02-04
Linux忘记用户名密码
2023-02-04