Добавить текстовый файл с выводом команды, но заменить уже существующие слова (Не добавлять один и тот же текст дважды)

Попробуйте:

string="foo
bar
baz"
echo "$string" | grep -v "$(find. -type f -exec cat {} + | grep -o "$string")"

Этот подход был выбран потому, что он считывает входные файлы только один раз.

Как это работает

  • find. -type f -exec cat {} +

    Это выполняет рекурсивный поиск файлов и выводит их содержимое на стандартный вывод.

  • grep -o "$string"

    Это выделяет любой текст, соответствующий строкам $string.

  • echo "$string" | grep -v "$(find. -type f -exec cat {} + | grep -o "$string")"

    grep -vвозвращает любую строку в строке, которая не найдена ни в одном из файлов рекурсивного поиска.

Пример

Рассмотрим каталог с файлами в нем, содержащими:

$ find. -type f -exec cat {} +
bar none
Here baz scaggs
behind bars
bazooka

Если мы добавим grep, мы получим только совпадающие слова:

$ find. -type f -exec cat {} + | grep -o "$string"
bar
baz
bar
baz

Собрав все вместе, мы определяем, что foo— единственное слово, которого нет в файлах:

$ echo "$string" | grep -v "$(find. -type f -exec cat {} + | grep -o "$string")"
foo
1
29.05.2020, 11:06
0 ответов

Теги

Похожие вопросы