Использование for
, вероятно, будет намного проще, чем find
.Примерно так:
otherdir='your_other_directory'
for file in *.txt; do
grep -q 'foo' $file && grep -v 'foo' < $file > $otherdir/$file
done
Если ваш grep
не понимает -q
, тогда:
otherdir='your_other_directory'
for file in *.txt; do
grep 'foo' $file > /dev/null && grep -v 'foo' < $file > $otherdir/$file
done
В любом случае grep
возвращает истинное значение в оболочкуесли он находит совпадение и конструкция X && Y
выполняет команду Y
, если X
возвращает истинное значение.
ОБНОВЛЕНИЕ : Предполагается, что в приведенном выше решении (как отметил Джонсон)что вы хотите удалить любые строки , которые содержат "foo".Если вы просто хотите удалить «foo», не удаляя целые строки, то sed
ваш друг:
otherdir='your_other_directory'
for file in *.txt; do
grep -q 'foo' $file && sed 's/foo//g' < $file > $otherdir/$file
done
Или:
otherdir='your_other_directory'
for file in *.txt; do
grep 'foo' $file > /dev/null && sed 's/foo//g' < $file > $otherdir/$file
done