Answers:
在grep以下情况下进行短路评估:
grep -q 'search_pattern' /file && : >/newfile
grep -q0如果在文件上找到模式,则在STDOUT上不产生任何输出,仅以退出状态退出
如果发现模式(&&),创建一个文件/newfile通过: >/newfile。
您也可以采用通常的touch /newfile方法,或者继续bash使用空重定向- >/newfile也可以。
只是要注意,如果文件已经存在,则touch仅更改相关时间戳而不会截断文件。而且,>/newfile在移动中的所有shell(例如中的zsh)中都不支持空重定向,在这些shell中,您必须手动发送EOF。
:怎么办?
:是的简写true,它是一个无操作命令,总是以退出状态0退出
您可以在其system()命令中使用awk 。如果/pattern/找到,{}则将执行代码块,在这种情况下,我们touch /tmp/my_file.txt通过system()命令调用。
以下示例显示了如果存在我的用户,则创建一个临时文件/etc/passwd。
$ awk '/xieerqi/{system("touch /tmp/my_file.txt")}' /etc/passwd
$ ls -l /tmp/my_file.txt
-rw-rw-r-- 1 xieerqi xieerqi 0 1月 25 07:58 /tmp/my_file.txt
或者,我们可以使用重定向来归档:
awk '/xieerqi/{f="/tmp/my_file.txt";print "" > f;close(f)}' /etc/passwd
grep搜索。该-q选项将禁止所有输出,并通过grep退出代码返回匹配/不匹配,这很容易测试。