У меня есть файл под названием 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, но новичком в оболочке", и затем делаю некоторую обработку.
Любая справка значительно ценилась бы.Спасибо!
Используя оболочку цикл является ненужным, как 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
Попробуйте этот пример кода, чтобы помочь определить и изменить для удовлетворения потребностям:
#!/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
переменная.