Potrzebuję wyszukać wzór w katalogu i zapisać nazwy plików, które go zawierają w tablicy.Przechowuj grep output w tablicy bash
Wyszukiwanie wzorca:
grep -HR "pattern" . | cut -d: -f1
Drukuje mi wszystkie nazwy plików, które zawierają "wzór".
Gdy próbuję:
targets=$(grep -HR "pattern" . | cut -d: -f1)
length=${#targets[@]}
for ((i = 0; i != length; i++)); do
echo "target $i: '${targets[i]}'"
done
Drukuje tylko jeden element, który zawiera ciąg ze wszystkimi filnames.
output: target 0: 'file0 file1 .. fileN'
Ale muszę:
output: target 0: 'file0'
output: target 1: 'file1'
.....
output: target N: 'fileN'
Jak mogę osiągnąć wynik bez robi nudne operację podziału na cele?
spektakularny! Już rzuciłem okiem na opcję "-l", przynosząc świetne przeboje. Czy możesz wyjaśnić, dlaczego działa dodanie dwóch nawiasów? –
To jest składnia tworzenia tablicy w BASH. Jeśli usuniesz zewnętrzny '(..)', to po prostu przypisujesz outout 'grep' do prostej zmiennej powłoki, która nie będzie traktowana jako tablica. – anubhava
nie działa, jeśli nazwa pliku zawiera spacje lub symbole wieloznaczne – lihao