gpt4 book ai didi

regex - 在文件夹中的每个文本文件中找到包含匹配模式的最后 5 行

转载 作者:太空狗 更新时间:2023-10-29 11:12:15 26 4
gpt4 key购买 nike

我是一个 Unix 新手,现在已经尝试解决这个任务很长一段时间了。如果有人可以帮助我,那就太好了。

问题 - 我需要遍历一个文件夹,进入每个 .txt 文件,然后获取具有特定单词的最后 5 行(例如:测试)

我正在尝试遍历文件夹,进入每个文件,并打印出现“test”一词的最后 5 行。

例如 - 如果在行号 1、3、5、7、9、12、14、15 中找到单词“test”。然后我只需要在第 7、9、12、14、15 行打印整行。(即出现这个词的最后 5 行)

我无法在我的问题中上传图片,但我希望此信息有所帮助:文件 1 - [这里出现了 7 次单词测试,我只需要最后 5 次]文件 2 - [这里有 6 次单词测试,我只需要最后 5 次]

我想出的命令是:cd 到文件夹路径:

find . -type f -exec grep -iH "test" {} + | tail -n5; tail -n0 | grep -i test

此命令有效,但它会打印最后 5 行,然后退出。它不会进入另一个文件。(因为它已经找到了它的最后 5 行与匹配的词)

在我的例子中,我希望输出是“每个”文件的最后 5 行。

有人可以帮忙吗?提前谢谢你。

最佳答案

第一个问题:

您不能在 find 命令的 exec 部分使用管道。作为解决方法,您在 exec 部分启动一个 shell,它接受一个现在可以包含管道的命令。

要让新启动的 shell 知道命令的开始和结束位置,只需使用单引号即可。

I need to loop through a folder, into each .txt

find . -name '*.txt'

where the word 'test' has occured.

find . -name '*.txt' -exec grep "test" {} \;

and print the last 5 lines

好的,这里我们需要在 find 的 exec 部分启动另一个 shell:

find . -name '*.txt' -exec sh -c 'grep "test" {} | tail -n5 ' \;

关于regex - 在文件夹中的每个文本文件中找到包含匹配模式的最后 5 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46501104/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com