在Linux(命令行)中:
我需要查找位于/users/tom/
或其任何子目录中且包含字符串{的所有Perl文件(文件名以->get(
或#hyphenate
结尾) {1}}和字符串find /users/tom -name "*.pl"
(位于不同的行或同一行)。我只需要文件的名称(及其路径' s)。我不需要文件中找到字符串的行。
是否有可以执行此操作的命令?
我知道如何找到一个扩展名的文件:
find /users/tom -name "*.pl" -name "*.pm"
find /users/tom -name "*.pl|*.pm"
但是我遇到了查找文件的麻烦,这些文件有两个不同的扩展名之一。这些命令都不起作用:
grep * -e "->get(" -e "#hyphenate"
我的解决方法是一个接一个地做,但我想必须有一个更优雅的方式。
现在查看文件的内容:
我知道如何使用grep打印文件名和匹配行:
var app = angular.module('app',[]);
app.controller('ctrl', function($scope) {
$scope.movies = [
{ title: 'The Godfather' },
{ title: 'Fargo' },
{ title: 'Sniper' },
{ title: 'Terminator'},
{ title: 'Click'},
{ title: 'Cake' },
{ title: 'Frozen' },
{ title: 'Casino Jack' },
{ title: 'Superman' },
{ title: 'The Matrix' }
];
});
app.filter('applyFirst', function() {
return function (movies) {
for(var i = 0; i < movies.length; ++i) {
if (i == 0)
movies[i].$first = true;
else {
if (movies[i].title.toLowerCase()[0] != movies[i-1].title.toLowerCase()[0]) {
movies[i].$first = true;
}
else {
movies[i].$first = false;
}
}
}
return movies;
}
});
列出包含至少一个搜索字符串的所有文件。但我想要一个包含所有搜索字符串的文件列表。
如何做到这一点? (在Ubuntu / Linux中使用表单命令行)
答案 0 :(得分:3)
grep
可以使用-r
递归搜索目录。要仅获取文件名而不是匹配的行,请使用-l
。
grep -rl -- '->get(\|#hyphenate' /users/tom | grep '\.p[lm]$'
或者,使用find:
find /users/tom -name '*.p[lm]' -exec grep -l -- '->get(\|#hyphenate' {} +
以上搜索->get(
或 #hyphenate
,如果您需要,则必须运行grep
两次:
find /users/tom -name '*.p[lm]' -exec grep -l -- '->get(' {} + \
| xargs grep -l '#hyphenate'
如果您的文件名包含空格,则可能需要为-Z
指定grep
,为-0
指定xargs
。
答案 1 :(得分:1)
grep -r PLACE_YOUR_STRING_HERE | cut -d ' ' -f 1 | grep '.p1\|.pm'
将字符串替换为您要查找的模式,然后在转到要查看的文件夹后运行该命令。
答案 2 :(得分:0)
find /usr/tom | egrep '*.pl| *.pm' | xargs cat | grep <PATTERN>