Я хочу заменить строку, содержащую шаблон, с помощью sed

Вы должны изменить это на это:

#!/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.

0
21.02.2020, 13:08
3 ответа

Синтаксис для произвольного количества символов: .*. *просто означает любое количество совпадений предыдущего символа или выражения. То есть .*означает любое количество совпадений ., которое соответствует любому символу.

2
28.04.2021, 23:22

Как насчет более короткого решения:

sed -ri -e 's%[.]/XYZ_(.*)_TIMESTAMP.dat%\1%' ref.list

Предполагается, что все входные данные следуют шаблону.

0
28.04.2021, 23:22

Предполагая, что у вас нет _символа в Site/SiteMetric (не уверен, что это переменная )и шаблон является статическим, вы можете сделать это следующим образом:

sed 's/\.[^_]*_//;s/_.*//;'

Первая часть sудалит часть ./XYZ_, а вторая часть удалит часть _TIMESTAMP.dat.

0
28.04.2021, 23:22

Теги

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