这是我在这里的第一个问题。我有一个名为";材料";,其中有40个文本文件;碳";(大写和小写形式(合并到一个文件中,并在它们之间留下换行符。我用了";grep-w碳*";以识别包含单词carbon的文件。我只是不知道在这一点之后该怎么办。我真的很感谢你的帮助!
grep -il carbon materials/*txt | while read line; do
echo ">> Adding $line";
cat $line >> result.out;
echo >> result.out;
done
解释
- grep搜索文件中的字符串-我忽略搜索字符串的大小写-l打印包含字符串的文件名
- while命令在包含字符串的文件上循环
- 猫与>gt;附加到结果。out
- echo>gt;在将每个文件的内容附加到结果后添加新行。out
执行
$ ls -1 materials/*.txt
materials/1.txt
materials/2.txt
materials/3.txt
$ grep -i carbon materials/*.txt
materials/1.txt:carbon
materials/2.txt:CARBON
$ grep -irl carbon materials/*txt | while read line; do echo ">> Adding $line"; cat $line >> result.out; echo >> result.out; done
>> Adding materials/1.txt
>> Adding materials/2.txt
$ cat result.out
carbon
CARBON
试试这个(假设文件名不包含换行符(:
grep -iwl carbon ./* |
while IFS= read -r f; do cat "$f"; echo; done > /tmp/combined
如果文件名可能包含换行符,并且shell是bash
,则:
grep -iwlZ carbon ./* |
while IFS= read -r -d '' f; do cat "$f"; echo; done > /tmp/combined
grep
被假定为GNUgrep
(对于-w
和-Z
选项(。请注意,这将在文件/tmp/combined
中留下一个尾随换行符。