Скрипт оболочки для проверки существования нескольких строк в файле

Вопрос или проблема

У меня есть 3 строки

A='яблоки'
B='бананы'
C='морковка'

Я хочу проверить, существуют ли все они в файле fruit.txt. Если мне не хватает A, тогда добавьте A, если B, тогда добавьте B, и так далее.

Вот что у меня сейчас

if grep -qF "$A | $B | $C" fruit.txt;
  then echo 'существует'
else
  echo 'не существует'
  echo $A $B $C >> fruit.txt
fi

В вашем объяснении того, что вы хотите сделать, содержится описание цикла (“если строка не существует, добавьте ее, повторите для всех строк”).

Вы могли бы проверить наличие каждой строки по отдельности в цикле, а затем добавить строку, если она уже не содержится в файле.

fruits=( яблоки бананы морковка )

for fruit in "${fruits[@]}"; do
    if grep -q -wF -e "$fruit" fruit.txt; then
        printf '%s существует\n' "$fruit"
    else
        printf '%s не существует\n' "$fruit"
        printf '%s\n' "$fruit" >>fruit.txt
    fi
done

Здесь я использую массив для строк. Если вы хотите использовать свои переменные $A, $B и $C, тогда установите fruits=( "$A" "$B" "$C" ) или выполните цикл с for fruit in "$A" "$B" "$C"; do ...; done.

Строго отвечая на ваш вопрос, вы можете сделать это:

grep -lr $1 . | xargs -I{} grep -lr $2 {}

Это найдет файлы, которые содержат $1 И $2

Ответ или решение

Для проверки существования нескольких строк в файле с использованием оболочки (Shell), можно создать скрипт, который сначала определяет, существуют ли данные строки в указанном файле, а затем добавляет недостающие строки. В этой статье мы рассмотрим, как реализовать этот процесс, используя основное программирование в оболочке Bash.

Задача

У вас есть три строки (фрукты):

  • A=’apples’
  • B=’bananas’
  • C=’carrots’

Вам нужно проверить, содержатся ли все они в файле fruit.txt. Если какой-либо из фруктов отсутствует, необходимо его добавить в файл.

Решение

Идеальный способ решения данной задачи – это использовать массив для хранения фрукти и цикл для проверки каждого элемента массива по отдельности. Давайте рассмотрим пошаговое решение:

  1. Создание массива: Мы создадим массив, который будет содержать все фрукты.
  2. Цикл проверки: С помощью цикла for проверим наличие каждого фрукта в файле.
  3. Добавление отсутствующих строк: Если фрукт отсутствует, мы добавим его в файл.

Пример скрипта

Вот пример скрипта, который выполняет описанные шаги:

#!/bin/bash

# Определяем строки
A='apples'
B='bananas'
C='carrots'

# Создаем массив с фруктами
fruits=("$A" "$B" "$C")

# Проверяем каждый фрукт
for fruit in "${fruits[@]}"; do
    # Проверяем существование фрукта в файле
    if grep -q -wF "$fruit" fruit.txt; then
        printf '%s существует в файле.\n' "$fruit"
    else
        printf '%s отсутствует в файле, добавляем...\n' "$fruit"
        # Добавляем фрукт в файл
        echo "$fruit" >> fruit.txt
    fi
done

Объяснение кода

  • Объявление переменных: Мы объявляем три строки, представляющие наши фрукты.
  • Создание массива: С использованием стандартного синтаксиса Bash мы создаем массив fruits, который содержит все три фрукта.
  • Цикл for: Этот цикл проходит по каждому элементу массива и проверяет наличие фрукта в файле fruit.txt с помощью команды grep.
    • grep -q: Флаг -q указывает на тихий (silent) режим, который подавляет вывод.
    • -w: Этот флаг используется для поиска только целых слов, предотвращая ложные срабатывания.
    • -F: Этот флаг обозначает фиксированную строку без регулярных выражений.

Если фрукт находится, выводится сообщение о его присутствии. В противном случае, программа сообщит об отсутствии фрукта и добавит его в файл с помощью команды echo.

Заключение

Данный скрипт является простым и эффективным способом для проверки наличия нескольких строк в файле, добавления недостающих строк и демонстрирует основные прикладные возможности скриптов на Bash. Это решение может быть легко расширено для включения дополнительных строк или модификации для работы с другими файлами. Рассматривая его работу, мы можем извлечь уроки по управлению данными в текстовых файлах с помощью утилит командной строки, что является важным навыком для системных администраторов и разработчиков.

Оцените материал
Добавить комментарий

Капча загружается...