将包含两个特定字符串的文件列表到 bash 中的数组中
list files containing two specific strings into an array in bash
在一个目录中(没有任何子目录)我有几个文本文件。
我想创建一个包含文件列表的数组,其中包含特定的两个字符串 Started uploading
和 UPLOAD COMPLETE
。
for i /directory_path/*.txt; do
#perform operations on 1
done
这是考虑目录中存在的所有文本文件。
在这里,在 i
中,我只想要包含上述字符串的文件。
任何 suggestion/help 都将得到批准!
如果您继续使用您的代码,那么可以做到这一点
declare -a files;
for i in directory_path/*.txt; do
if grep -q 'Started Uploading' "$i" && grep -q 'UPLOAD COMPLETE' "$i"; then
files+=("$i")
fi
done
echo "matching files: ${files[@]}"
如前所述,grep -l 可以为您提供包含匹配短语的文件列表。使用 IFS,您可以将该列表直接从 grep 读取到数组中:
#! /usr/bin/env bssh
OLD_IFS=$IFS
IFS=$'\n'
declare -a array=( $(grep -l 'Started uploading\|UPLOAD COMPLETE' "dir"/*) )
IFS=$OLD_IFS
echo "count: ${#array[@]}"
printf " %s\n" "${array[@]}"
你必须save/restore IFS
在一个目录中(没有任何子目录)我有几个文本文件。
我想创建一个包含文件列表的数组,其中包含特定的两个字符串 Started uploading
和 UPLOAD COMPLETE
。
for i /directory_path/*.txt; do
#perform operations on 1
done
这是考虑目录中存在的所有文本文件。
在这里,在 i
中,我只想要包含上述字符串的文件。
任何 suggestion/help 都将得到批准!
如果您继续使用您的代码,那么可以做到这一点
declare -a files;
for i in directory_path/*.txt; do
if grep -q 'Started Uploading' "$i" && grep -q 'UPLOAD COMPLETE' "$i"; then
files+=("$i")
fi
done
echo "matching files: ${files[@]}"
如前所述,grep -l 可以为您提供包含匹配短语的文件列表。使用 IFS,您可以将该列表直接从 grep 读取到数组中:
#! /usr/bin/env bssh
OLD_IFS=$IFS
IFS=$'\n'
declare -a array=( $(grep -l 'Started uploading\|UPLOAD COMPLETE' "dir"/*) )
IFS=$OLD_IFS
echo "count: ${#array[@]}"
printf " %s\n" "${array[@]}"
你必须save/restore IFS