我需要在一个目录中搜索一个模式,并将包含该模式的文件名保存在一个数组中。
搜索模式:
grep -HR "pattern" . | cut -d: -f1
字符串
这将打印所有包含“pattern”的文件名。
如果我尝试:
targets=$(grep -HR "pattern" . | cut -d: -f1)
length=${#targets[@]}
for ((i = 0; i != length; i++)); do
echo "target $i: '${targets[i]}'"
done
型
这只打印一个包含所有filname的字符串的元素。
output: target 0: 'file0 file1 .. fileN'
型
但我需要:
output: target 0: 'file0'
output: target 1: 'file1'
.....
output: target N: 'fileN'
型
我怎样才能在不对目标进行无聊的分割操作的情况下实现结果?
1条答案
按热度按时间x0fgdtte1#
旧的答案(写于2014年)假设输出文件名不会包含空格或globs等特殊字符。这里有一个安全的方法将这些特殊文件名读入数组:(将适用于旧的bash版本)
字符串
在BASH 4+上,你可以使用
readarray
来代替循环:型
旧答案:
您可以用途:
型
注意在BASH中使用
(...)
创建数组。还可以使用
grep -l
在grep
的输出中只获取文件名(如我的命令所示)。