Проверьте все файлы в каталоге, содержат ли они определенную строку два или более раз - PullRequest
0 голосов
/ 08 мая 2018

Я хотел бы проверить все файлы в каталоге, могут ли они содержать два или более вхождений строки.

Проверка единственного " вхождения определенной строки с использованием bash " кажется простой:

if grep -q "LineString" "$File"; then
  Some Actions # SomeString was found
fi

а как считать до двух?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Используйте (( )) для числового сравнения:

if (( $(grep -c -- "LineString" "$file") >= 2 )); then
  # your logic
fi

Чтобы перебрать все файлы:

#!/bin/bash
shopt -s nullglob # make glob expand to nothing if there are no matching files
for file in *; do
    [[ -f $file ]] || continue
    if (( $(grep -c -- "LineString" "$file") >= 2 )); then
      # your logic
    fi
done

Если вы имеете дело с очень большими файлами и ваш grep поддерживает опцию -m, то вы можете использовать grep -cm 2 для оптимизации чтения:

#!/bin/bash
shopt -s nullglob
for file in *; do
    [[ -f $file ]] || continue
    if (( $(grep -cm 2 -- "LineString" "$file") >= 2 )); then
      # your logic
    fi
done
0 голосов
/ 08 мая 2018

Попробуйте это

if [ `grep "LineString" $file | wc -l` -gt 1 ]; then 
    echo "done found";
    ' do something
fi;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...