Вы должны изменить это на это:
#!/bin/bash
BOOKFILE="/home/sk/GUTINDEX.ALL"
author=$@
if [[ -z "$author" ]]; then
read -rp "Author name: " author
fi
grep "$author" "$BOOKFILE"
Если вы запустите его как:
$./script Frank Lockwood
Вы устанавливаете позиционный параметр 1 на Frank
и параметр 2 на Lockwood
. Параметр 2 не используется в вашем скрипте. $@
— это массив, который будет представлять все позиционные параметры.
Кроме того, если вы разрешите read
установить вашу переменную author
в строку с пробелами, это приведет к ошибке в строке grep без кавычек author
.
Синтаксис для произвольного количества символов: .*
. *
просто означает любое количество совпадений предыдущего символа или выражения. То есть .*
означает любое количество совпадений .
, которое соответствует любому символу.
Как насчет более короткого решения:
sed -ri -e 's%[.]/XYZ_(.*)_TIMESTAMP.dat%\1%' ref.list
Предполагается, что все входные данные следуют шаблону.
Предполагая, что у вас нет _
символа в Site/SiteMetric (не уверен, что это переменная )и шаблон является статическим, вы можете сделать это следующим образом:
sed 's/\.[^_]*_//;s/_.*//;'
Первая часть s
удалит часть ./XYZ_
, а вторая часть удалит часть _TIMESTAMP.dat
.