Shell如何检查文件中的一行中是不是存在模式

Posted

技术标签:

【中文标题】Shell如何检查文件中的一行中是不是存在模式【英文标题】:Shell How to check if a pattern exists in a line in fileShell如何检查文件中的一行中是否存在模式 【发布时间】:2015-12-20 14:07:56 【问题描述】:

我们如何检查文件中特定行号的行中是否存在模式或字符串:

一个文件在第 28 行有以下行:

page.sysauth = “管理员”

我需要检查此特定行是否存在“Admin”(它可能存在也可能不存在于整个文件的多个位置。)

谢谢

【问题讨论】:

【参考方案1】:

使用 awk 你可以做到这一点:

awk '/Admin/ && NR == 28  print "exists" ' file

或者使用sed | grep:

sed '28q;d' file | grep -q 'Admin' && echo "exists"

【讨论】:

我们如何将它与 if in shell 结合使用,即代替 echo 存在。我需要将此作为条件进行检查, && 确实是一个外壳构造。使用 if/fi 你可以做到 if sed '28q;d' file | grep -q 'Admin'l then echo "exists" else echo "nope"; fi 您仍然可以将awk'/Admin/ && NR==28 exit 0 END exit 1' 一起使用。 @chepner awk NR==28print !/Admin/ 也会这样做。存在 0 表示成功 1 表示失败,或者删除 ! 表示 1 表示匹配 0 表示不匹配。 @karakfa 输出一个值;它不会退出 1 或 0(或者更确切地说,它的退出状态与第 28 行上 Admin 的存在无关)。此外,它假定文件至少有 28 行。【参考方案2】:

使用head & tail 提取该行,然后使用grep 来检查是否存在:

if head -n28 file | tail -n1 | grep -q '"Admin"' ; then
    echo Present
else
    echo Not present
fi

【讨论】:

【参考方案3】:

使用 awk

awk 'NR==28print (/Admin/?"":"Not ")"present"' file

【讨论】:

【参考方案4】:

这可能对你有用(GNU sed):

sed -n '$q1;28/Admin/q0;q1' file && echo present || echo not present

【讨论】:

以上是关于Shell如何检查文件中的一行中是不是存在模式的主要内容,如果未能解决你的问题,请参考以下文章

在VC里如何检查一个文件是不是存在

检查文件扩展名为“.ini”的文件是不是存在,shell

如何检查给定模式中是不是存在表

如何在 shell 脚本中检查目录是不是存在? [复制]

如何使用 shell 脚本检查 MySQL 数据库中是不是存在表?

如何在 Shell 脚本中执行语法检查调试模式