【问题标题】:Check first N lines of bash file for string检查 bash 文件的前 N ​​行是否有字符串
【发布时间】:2013-02-03 01:42:40
【问题描述】:

我正在尝试编写一个 bash 脚本,该脚本可以通过并仅检查文件的前 N ​​行以匹配特定字符串。我可以编写一个简单的命令来检查整个文件,但是包含在大于 N 的行中的信息可能不准确。

这是我目前的实现

find . -exec egrep -H -m 1 -l "\<$month/$day/$year\>" {} \;

我想先使用 head 函数来修剪文件,但这似乎不起作用。有什么建议么?提前致谢

【问题讨论】:

    标签: linux bash shell unix scripting


    【解决方案1】:

    这将显示与前N 行中的模式匹配的文件

    find . -type f | xargs egrep -H -m 1 -n "\<$month/$day/$year\>" | awk -F : '$2 <= N { print $1; }'
    

    egrep 搜索文件中的第一个匹配项并添加行号。 awk 然后搜索行号小于或等于 N(在此处插入数字)的所有行并打印文件名。

    【讨论】:

    • 这对我有用,但我不希望它打印匹配的行。任何快速修复。我现在正在搞砸它,但我真的没有任何运气。我只想要文件名
    • 我可以只使用cut,但如果可能的话我宁愿不用。只是个人喜好,我觉得有时候剪裁有点草率
    • @MZimmerman6 抱歉,是我的错,复制不当。 awk 已经处理好了。请参阅固定答案。
    【解决方案2】:

    大概是这样

    find -type f | xargs head -N | egrep -H -m 1 -l "\<$month/$day/$year\>"
    

    其中N 是行数。

    【讨论】:

    • 在head后面加“-$N”,其中N是行数,你就有了很好的答案
    • 这行不通,因为egrep 从标准输入读取作为一个大输入并停止打印(standard input),如果找到匹配项。
    • 是的,Olaf 是对的,这对我不起作用。它正在停止并打印(standard input)。我也得到head: Error reading (Path) 其中路径是我指定的路径
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 2023-01-29
    • 2022-11-02
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    相关资源
    最近更新 更多