我想获取多个文件的最后 10 行。我知道它们都以“-access_log”结尾。所以我试过:
tail -10 *-access_log
Run Code Online (Sandbox Code Playgroud)
但这给了我一个错误,例如:
tail -10 file-*
Run Code Online (Sandbox Code Playgroud)
给我我期望的输出。我认为这可能更多地与 BASH 相关,然后是尾部。但是命令如:
cat *-access_log
Run Code Online (Sandbox Code Playgroud)
工作正常。
有什么建议?
Kyl*_*ndt 10
我相信你会想要:
tail -n 10 *-access.log
Run Code Online (Sandbox Code Playgroud)
至于为什么:
我认为这与通配没有任何关系:
tail -10 foo-access.log arf-access.log
tail: option used in invalid context -- 1
Run Code Online (Sandbox Code Playgroud)
我认为您的 glob 恰好扩展为一个文件。它可能与一些我懒得尝试阅读的陈旧选项解析有关,但是如果您真的想知道,请查看tail.c
coreutils 源并剖析以下函数:
parse_obsolete_option (int argc, char * const *argv, uintmax_t *n_units)
Run Code Online (Sandbox Code Playgroud)
虽然有点老,但问题仍然相关。我遇到了类似的问题
ssh myserver.com 'tail -2 file-header*'
Run Code Online (Sandbox Code Playgroud)
这给了我错误
尾部:在无效上下文中使用的选项 -- 2
然而,只拖尾一个文件,比如
ssh myserver.com 'tail -2 file-header-file-one'
Run Code Online (Sandbox Code Playgroud)
工作正常。查看源代码tail.c显示,tail从解析过时的选项开始,然后解析其余的(即尚未处理的选项),常规选项。但是,parse_obsolete_option()
期望“过时”用法,只有一个文件作为参数。
因此,当提供更多文件时,该函数会立即返回,并让常规解析器阻塞-2
(期望-n 2
)。
ssh myserver.com 'tail -2 file-header*'
Run Code Online (Sandbox Code Playgroud)
总之,最好总是使用-n
正则形式,知道“过时”的代码只接受一个文件。
归档时间: |
|
查看次数: |
7215 次 |
最近记录: |