仅在满足条件时搜索文件并创建新文件

Jac*_*ife 10 command-line

我有一个日志文件,我想在其中搜索一个字符串,并且仅当找到该字符串时才创建一个新文件。我怎样才能做到这一点, sed 在这种情况下似乎很合适。

hee*_*ayl 16

在以下之后进行短路评估grep

grep -q 'search_pattern' /file && : >/newfile
Run Code Online (Sandbox Code Playgroud)
  • grep -q在 STDOUT 上不产生任何输出,0如果在文件中找到模式,则仅以退出状态退出

  • 如果找到模式 ( &&),则/newfile通过: >/newfile.


您也可以采用通常的touch /newfile方法,或者bash使用空重定向——>/newfile也可以。

请注意,如果文件已经存在,那么touch只会更改相关的时间戳而不截断文件。并且>/newfile并非所有正在运行的 shell 都支持空重定向(例如在 中zsh),您必须手动发送 EOF。

  • @George `:` 是 `true` 的简写,它是一个无操作命令,总是以退出状态 0 退出。 (5认同)

Jac*_*ijm 6

只是为了好玩:

python3 -c "if 'string' in open('logfile').read(): open('newfile', 'wt')"
Run Code Online (Sandbox Code Playgroud)

where'string'替换为字符串(条件),'logfile'替换为日志文件的路径,'newfile'替换为要创建的文件的实际路径,全部用单引号括起来,如示例中所示。