Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Grep仅查找所需文件后的最后一行_Bash_Search_Grep_Find - Fatal编程技术网

Bash Grep仅查找所需文件后的最后一行

Bash Grep仅查找所需文件后的最后一行,bash,search,grep,find,Bash,Search,Grep,Find,嗨,伙计们,我有一个来自 我需要找到一些给定文件名的文件,并在这些文件的最后一行使用grep来查找某个字符串 我目前有: find my_dir/-name“*filename*”| xargs grep'lookingfor' 我对使用这些命令还不熟悉,希望您能给予我很多帮助。提前感谢。例如,您可以: find my_dir/ -name "*filename*" -exec sh -c "tail -200 {} | grep lookingfor" \; 将200设置为所需的最后行数。例

嗨,伙计们,我有一个来自

我需要找到一些给定文件名的文件,并在这些文件的最后一行使用grep来查找某个字符串

我目前有:

find my_dir/-name“*filename*”| xargs grep'lookingfor'


我对使用这些命令还不熟悉,希望您能给予我很多帮助。提前感谢。

例如,您可以:

find my_dir/ -name "*filename*" -exec sh -c "tail -200 {} | grep lookingfor" \;

200
设置为所需的最后行数。

例如,您可以执行以下操作:

find my_dir/ -name "*filename*" -exec sh -c "tail -200 {} | grep lookingfor" \;
200
设置为您想要的最后一行数。

我同意

find  my_dir -name '*filename*' -type f \
     -exec /bin/bash -c '(tail -5 "$1" | grep -q lookingfor) && echo "$1"' _ {} \;
通过这种方式,您将正确处理所有(很好,希望是所有:-)文件名,甚至是其中带有“和其他奇怪符号的文件名。此外,我建议显式地调用/bin/bash,因为/bin/sh可能链接到一个有缺陷的sh变体上,如
ash
sash
dash
我会赞同

find  my_dir -name '*filename*' -type f \
     -exec /bin/bash -c '(tail -5 "$1" | grep -q lookingfor) && echo "$1"' _ {} \;

通过这种方式,您将正确处理所有(好的,希望是所有:-)文件名,甚至是其中带有“和其他奇怪符号的文件名。我还建议显式地调用/bin/bash,因为/bin/sh可能链接到一个残缺的sh变量上,如使用find+awk+wc-l的
ash
sash
dash

find  my_dir -name '*filename*' -type f -exec awk 'NR>count-100{print FILENAME, $0}' count=$(wc -l < {}) {} +
find my_dir-name'*filename*'-type f-exec awk'NR>count-100{print filename,$0}'count=$(wc-l<{}){}+

将100调整为所需的最后行数。

使用find+awk+wc-l

find  my_dir -name '*filename*' -type f -exec awk 'NR>count-100{print FILENAME, $0}' count=$(wc -l < {}) {} +
find my_dir-name'*filename*'-type f-exec awk'NR>count-100{print filename,$0}'count=$(wc-l<{}){}+

将100调整为您想要的最后一行数。

这样他就丢失了files@user3159253他可以添加
-H
标志来解决这个问题不,他不能。tail吃掉了文件名,grep只在STDIN上工作,你可以试试:
tail/path/to/file | grep-H lookingfor
给了我
(标准输入):lookingfor
@user3159253很好,你的答案是+1。这样他就失去了files@user3159253他可以添加
-H
标志来解决这个问题不,他不能。tail吃掉了文件名,grep只在STDIN上工作,实际上你可以试试:
tail/path/to/file;grep-H lookingfor
给了我
(标准输入):lookingfor
@user3159253很好的捕捉,你的答案是+1。而且我似乎刚刚在bash中发现了一个bug/一个奇怪的行为:
bash-c'echo\$@=\“$”;'ABC给了我
$@=“BC”
:-)。这就是为什么我需要在命令参数
{}
之间添加一个
,而且我似乎刚刚在bash中发现了一个bug/一个奇怪的行为:
bash-c'echo\$@=\“$@;”ABC给了我
$@=“BC”
:-)。这就是为什么我需要在命令参数
{}