список файлов, содержащих две конкретные строки в массив в bash - PullRequest
0 голосов
/ 30 сентября 2018

Внутри каталога (без каких-либо подкаталогов) у меня есть несколько текстовых файлов.

Я хочу создать массив, содержащий список файлов, который содержит две конкретные строки, скажем Started uploading и UPLOAD COMPLETE.

for i /directory_path/*.txt; do
  #perform operations on 1
done

Это касается всех текстовых файлов, присутствующих вкаталог.Здесь, в i я хочу только файлы, которые содержат вышеупомянутые строки.

Любое предложение / помощь будут оценены!

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Как уже упоминалось, 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[@]}"

Вы должны сохранить / восстановить IFS

0 голосов
/ 30 сентября 2018

Если вы продолжите вводить код, то можете сделать это

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[@]}"
...