Хорошо, это явно домашнее задание, поэтому я не собираюсь давать вам полное решение. Вот схема
while "there are lines left in the file, read a line" do
grep "the line" "the file"
done
ключ для получения строк - команда read
. Сделайте help read
в bash для деталей.
Обновление
Хорошо, давайте посмотрим немного повнимательнее. Запустите скрипт с
Давайте назовем скрипт a.bash. Вы хотите запустить его как
$ a.bash b.txt < a.txt > a_match.txt
a.bash
- это скрипт, который читает строку из a.txt, выполняет поиск в b.txt
и отправляет вывод в STDOUT, который затем направляется в ваш файл a_match.txt.
Запустите скрипт с "строкой Шебанга". Обычно это
#!/usr/bin/bash --
или что-то подобное.
Примитив read
просто считывает строку в переменную и по умолчанию считывает переменную с именем REPLY. Так что "в файле осталось строк, прочитайте строку" просто
while read
Имя файла для поиска будет в специальной переменной оболочки $ 1, представляющей первый аргумент. Поскольку другие имена используются в перенаправлении, они вообще не появляются в качестве аргументов.
Теперь команда grep (1) ищет в файле строку и помещает строку, в которой эта строка встречается, в STDOUT. Так что все, что нам нужно для поиска, это
grep $REPLY b.txt
(прочитайте справочную страницу для grep .)
Поскольку grep (1) в любом случае выводит вывод в STDOUT, он отключится и будет перенаправлен в a_matches.txt
. Это ваша строка "grep the line in the file".
Теперь просто соберите все это вместе.
Тест:
- Почему это
$REPLY
?
Как бы вы изменили скрипт, чтобы вы могли назвать его так:
$ a.bash a.txt b.txt a_matches.txt