Shell 如何在文件中查找行?
如何使用shell脚本在给定文件中查找行? 文件名为/etc/crontab。内容如下:Shell 如何在文件中查找行?,shell,unix,Shell,Unix,如何使用shell脚本在给定文件中查找行? 文件名为/etc/crontab。内容如下: 17 */1 * * * root /opt/first.sh */1 * * * * root /opt/second.sh grep-q“*/1****root/opt/second.sh”/etc/crontab 我已经使用了上面的命令并得到了$?代码是1而不是0 那怎么了?。如果你有别的办法,请告诉我。谢谢 在unix中被视为通配符。即使在“*”中,*也能完成它的工作 使用 否则它会纠正的 g
17 */1 * * * root /opt/first.sh
*/1 * * * * root /opt/second.sh
grep-q“*/1****root/opt/second.sh”/etc/crontab
我已经使用了上面的命令并得到了$?
代码是1而不是0
那怎么了?。如果你有别的办法,请告诉我。谢谢 - 在unix中被视为通配符。即使在“*”中,*也能完成它的工作
grep -q "*/1 * * * * root /opt/second.sh" /etc/crontab ## will grep nothing and still return success code
- 在unix中被视为通配符。即使在“*”中,*也能完成它的工作
grep -q "*/1 * * * * root /opt/second.sh" /etc/crontab ## will grep nothing and still return success code
要匹配文字星号,您必须告诉grep该星号是文字星号 为此,您需要用
[
和]
现在看起来是这样的:
grep -q "[*]/1 [*] [*] [*] [*] root /opt/second.sh" /etc/crontab
要匹配文字星号,您必须告诉grep该星号是文字星号 为此,您需要用
[
和]
现在看起来是这样的:
grep -q "[*]/1 [*] [*] [*] [*] root /opt/second.sh" /etc/crontab
如果要匹配固定字符串,最简单的方法是使用
-F
选项:
$ grep -F "*/1 * * * * root /opt/second.sh" crontab
*/1 * * * * root /opt/second.sh
或者,要仅获取退出代码,请添加-q
:
$ grep -qF "*/1 * * * * root /opt/second.sh" crontab ; echo code=$?
code=0
通常,grep
将搜索字符串解释为正则表达式。这意味着像*
或
或+
这样的字符处于活动状态-F
关闭该功能,以便将搜索字符串视为普通固定字符串
*/**root/opt/second.sh的含义
观察*/**root/opt/second.sh匹配的内容:
$ echo '*/ root /opt/second.sh' | grep '*/ * * * * root /opt/second.sh'
*/ root /opt/second.sh
但是,以下内容不匹配:
$ echo '*/ * root /opt/second.sh' | grep '*/ * * * * root /opt/second.sh'
$
*
被视为前面的零个或多个字符。因此,**
匹配零个或多个空格。它和星星不相配
grep
特别对待正则表达式开头的星号。由于*
表示零个或多个前置字符,且开头的*
没有前置字符,因此没有意义。许多程序都会给出一个错误<相比之下,code>grep
在这种特殊情况下将*
等解释为文字星形。如果要匹配固定字符串,最简单的方法是使用-F
选项:
$ grep -F "*/1 * * * * root /opt/second.sh" crontab
*/1 * * * * root /opt/second.sh
或者,要仅获取退出代码,请添加-q
:
$ grep -qF "*/1 * * * * root /opt/second.sh" crontab ; echo code=$?
code=0
通常,grep
将搜索字符串解释为正则表达式。这意味着像*
或
或+
这样的字符处于活动状态-F
关闭该功能,以便将搜索字符串视为普通固定字符串
*/**root/opt/second.sh的含义
观察*/**root/opt/second.sh匹配的内容:
$ echo '*/ root /opt/second.sh' | grep '*/ * * * * root /opt/second.sh'
*/ root /opt/second.sh
但是,以下内容不匹配:
$ echo '*/ * root /opt/second.sh' | grep '*/ * * * * root /opt/second.sh'
$
*
被视为前面的零个或多个字符。因此,**
匹配零个或多个空格。它和星星不相配
grep
特别对待正则表达式开头的星号。由于*
表示零个或多个前置字符,且开头的*
没有前置字符,因此没有意义。许多程序都会给出一个错误<相比之下,code>grep
将*
等解释为在这种特殊情况下是一个字星号。您得到的错误是什么?我想使用grep-q“*/1****root/opt/second.sh”/etc/crontab
命令,通过$?
判断文件是否具有“*/1****根/opt/second.sh”行。但是,它始终是1而不是0。您得到的错误是什么?我想使用grep-q“*/1****root/opt/second.sh”/etc/crontab
命令来判断文件是否为/etc/crontab
具有“*/1****root/opt/second.sh”行。但是,它始终是1而不是0。