Эхо для всех файлов, найденных из GREP - PullRequest
0 голосов
/ 05 августа 2020

У меня проблема с кодом. grep ищет файлы, в которых нет слова «код», и мне нужно добавить «не имеет» в качестве последней строки в этих файлах

По logi c

echo 'doesnt have' >> grep -ril 'code' file/file

Я использую -ril, чтобы игнорировать регистры и получать имена файлов

Кто-нибудь знает, как добавить текст к каждому файлу .txt, найденному при поиске с помощью grep?

Ответы [ 3 ]

2 голосов
/ 05 августа 2020

Как вам новая альтернатива?

echo "doesn't have" |
tee -a $(grep -riL 'code' file/file)

Я переключился на опцию -L, чтобы перечислить файлы, которые не содержат строку поиска.

Это, к сожалению, довольно хрупкое в том смысле, что предполагается, что ваши имена файлов не содержат пробелов или других метасимволов оболочки. Это может быть исправлено за счет некоторой сложности (кратко, grep выводит совпадения с завершающим нулем и считывает их в массив с readarray -d ''. Для этого требуется достаточно недавний Bash и, вероятно, GNU grep. )

0 голосов
/ 05 августа 2020

Использование while read loop и Process Substitution.

#!/usr/bin/env bash

while IFS= read -r files; do
  echo "doesn't have" >> "$files"
done < <(grep -ril 'code' file/file)

Как упоминалось @ dibery

#!/bin/sh

grep -ril 'code' file/file | {
  while IFS= read -r files; do
    echo "doesn't have" >> "$files"
  done
}
0 голосов
/ 05 августа 2020

Команда 'echo' может добавить вывод в один файл, который должен быть указан путем перенаправления стандартного вывода. Для обновления нескольких файлов необходим al oop. L oop перебирает все файлы, найденные с помощью grep

for file in $(grep -ril 'code' file/file) ; do
    echo 'doesnt have' >> $file
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...