Если вы пытаетесь создать скрипт, который позволяет вводить регулярное выражение (регулярное выражение) в качестве аргумента (позиционный параметр), вы можете просто использовать форму
grep "$2" "$1"
, где "$2"
- это регулярное выражение, а "$1"
- имя файла. Вы также можете добавить любые дополнительные параметры для grep
по желанию (например, -A 1
для одной строки контекста после совпадения и т. Д.)
Краткий пример:
#!/bin/bash
[ -z "$1" -o -z "$2" ] && {
printf "error: insufficient input.\n"
printf "usage: %s filename regex\n" "${0##*/}"
exit 1
}
[ -r "$1" ] || {
printf "error: file not readable '%s'\n" "$1"
exit 2
}
grep "$2" "$1"
( примечание: нет необходимости экранировать '$'
, поскольку он теряет свое особое значение, когда содержится в строке - расширение не выполняется - до тех пор, пока оно заключено в кавычки)
Пример использования / Вывод
$ bash parse.sh gutindex.all '[^0-9]1$'
Try and Trust, by Horatio Alger, Jr. 1
или
$ bash parse.sh gutindex.all '23$'
A Tramp Abroad, Part 1, by Mark Twain 23
Есть несколько способов подойти к этому. Посмотрите и дайте мне знать, если у вас есть дополнительные вопросы.