使用xenserver,我想对目录中的每个文件执行一个命令,从命令的输出中删除一些内容,并将其附加到一个文件中。我很清楚我想使用的命令以及如何根据需要grep出字符串。但我不清楚的是,我如何让它对每个文件执行这个命令,转到下一个,直到没有更多的文件被发现。
kokeuurv1#
在Linux中,我通常使用此命令递归地grep获取目录中的特定文本:
grep
grep -rni "string" *
哪里
r
n
stdout
i
pxiryf3j2#
grep $PATTERN *就足够了。默认情况下,grep会跳过所有子目录。但是,如果你想通过grep来访问它们,那么grep -r $PATTERN *就是这样。
grep $PATTERN *
grep -r $PATTERN *
dohp0rv53#
使用find。说真的,这是最好的方法,因为这样你就可以真正看到它正在操作的文件:
find . -name "*.sql" -exec grep -H "slow" {} \;
注意,-H是Mac专用的,它在结果中显示文件名。
dl5txlt94#
要在所有子目录中搜索,但仅在特定文件类型中搜索,请使用grep和--include。例如,在当前目录中递归搜索 *.yml和 *.yaml中的文本:
--include
grep "text to search" -r . --include=*.{yml,yaml}
rqqzpn5f5#
如果要执行多个命令,可以使用用途:
for I in `ls *.sql` do grep "foo" $I >> foo.log grep "bar" $I >> bar.log done
bz4sfanl6#
tldr:
grep -r --include=*.md --include=*.markdown --exclude-dir=node_modules "postgres" grep -r -o --include=*.md --include=*.markdown --exclude-dir=node_modules "postgres"
我在Ubuntu上使用bash和GNU grep 3.7:
$ grep -V grep (GNU grep) 3.7 Copyright (C) 2021 Free Software Foundation, Inc.
我想搜索扩展名为**.md或.markdown**的文件中的任何内容。第一个例子产生了这样的结果:
elves/_posts/2023-09-11-postgres.markdown:postgres elves/_heroku-guide/HerokuDataStarter.md:https://elements.heroku.com/addons/heroku-postgresql elves/_heroku-guide/HerokuDataStarter.md:heroku addons:create heroku-postgresql:hobby-dev vendor/bundle/ruby/3.0.0/gems/zeitwerk-2.6.7/README.md:# my_gem/db_adapters/postgresql.rb
第二个:
elves/_posts/2023-09-11-postgres.markdown:postgres elves/_heroku-guide/HerokuDataStarter.md:postgres elves/_heroku-guide/HerokuDataStarter.md:postgres vendor/bundle/ruby/3.0.0/gems/zeitwerk-2.6.7/README.md:postgres vendor/bundle/ruby/3.0.0/gems/eventmachine-1.2.7/docs/GettingStarted.md:postgres vendor/bundle/ruby/3.0.0/gems/zeitwerk-2.6.6/README.md:postgres
我发现以下内容很有帮助:
#! /bin/bash GREP='grep -r --include=*.md --include=*.markdown --exclude=bundle.js etc...'
6条答案
按热度按时间kokeuurv1#
在Linux中,我通常使用此命令递归地
grep
获取目录中的特定文本:哪里
r
=递归,即在当前目录中搜索子目录n
=将行号打印到stdout
i
=不区分大小写搜索pxiryf3j2#
grep $PATTERN *
就足够了。默认情况下,grep会跳过所有子目录。但是,如果你想通过grep来访问它们,那么grep -r $PATTERN *
就是这样。dohp0rv53#
使用find。说真的,这是最好的方法,因为这样你就可以真正看到它正在操作的文件:
注意,-H是Mac专用的,它在结果中显示文件名。
dl5txlt94#
要在所有子目录中搜索,但仅在特定文件类型中搜索,请使用grep和
--include
。例如,在当前目录中递归搜索 *.yml和 *.yaml中的文本:
rqqzpn5f5#
如果要执行多个命令,可以使用用途:
bz4sfanl6#
tldr:
我在Ubuntu上使用bash和GNU grep 3.7:
我想搜索扩展名为**.md或.markdown**的文件中的任何内容。
第一个例子产生了这样的结果:
第二个:
我发现以下内容很有帮助: