Как я читаю линию за линией в файле с помощью цикла с условием продолжения, и в каждом повторении, grep каждая строка для сравнения со строкой?

У меня есть файл под названием abc.txt с содержанием следующим образом:

1: It is a shell script
2: There are few lines in this file
3: I am good with programming in C, but beginner in shell
4: We are going towards end of file
5: END OF FILE

Я хочу считать каждый файл многократно, и в каждом повторении я хочу сравнить строку с, "Я хорош с программированием в C, но новичком в оболочке", и затем делаю некоторую обработку.

Любая справка значительно ценилась бы.Спасибо!

2
задан 4 December 2018 в 20:32

2 ответа

Используя оболочку цикл является ненужным, как grep уже выполняет итерации по строкам:

grep '^[0-9]:  I am good with programming in C, but beginner in shell' input.txt

Если будет согласующий отрезок длинной линии, то он будет распечатан. [0-9] определяет диапазон символов, которые будут подобраны. Мы можем также расширить это до более длинных чисел [0-9]*: (и я думаю с жемчугом regex -P опция, которая могла быть сделана как [0-9]+:).

Если цикл оболочки действительно необходим, мы можем использовать case оператор для сопоставления с образцом

while IFS= read -r line; do
    case $line in
        *": I am good with programming in C") echo "Matched: $line";;
    esac
done < input.xt
9
ответ дан 2 December 2019 в 01:25

Попробуйте этот пример кода, чтобы помочь определить и изменить для удовлетворения потребностям:

#!/usr/bin/env bash
set -e
set -x 

while read -r linenum line
do
        if [ "$line" = "I am good with programming in C, but beginner in shell" ]
        then
                # Process things here
                echo "same"
        fi
done < "$1"

Использование:

  • Сделайте исполняемый файл:

    chmod +x script.sh
    
  • Сценарий места в любой папке затем запускает скрипт путем передачи файла ему:

    ./script.sh /path/to/data.txt
    

Информация:

  • -r: Опция, переданная команде чтения, предотвращает побеги обратной косой черты из того, чтобы быть интерпретируемым.
  • set -e: Опция Bash остановить сценарий на первой ошибке.
  • set -x: Опция Bash раньше отлаживала scrtip.
  • "$1": Файловая переменная передала сценарию в этом случае data.txt
  • linenum: переменная, которая содержит номера строки, когда удар разделяет строки чтения на две переменные, в то время как другой передается на пути lin переменная.
8
ответ дан 2 December 2019 в 01:25

Другие вопросы по тегам:

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