Интересно, есть ли в Linux команда, которая может помочь мне найти строку, которая начинается с «*» и содержит специальный символ «|», , напримерпоиск строки, содержащей специальный символ с помощью sed или awk
* Date | Auteurs
Интересно, есть ли в Linux команда, которая может помочь мне найти строку, которая начинается с «*» и содержит специальный символ «|», , напримерпоиск строки, содержащей специальный символ с помощью sed или awk
* Date | Auteurs
Просто используйте:
grep -ne '^\*.*|' "${filename}"
Или, если вы хотите использовать sed
:
sed -n '/^\*.*|/{=;p}' "${filename}" | sed '{N;s/\n/:/}'
Или (ГНУ) awk
эквивалент (требуют обратной косой черты трубы):
awk '/^\*.*\|/' "${filename}"
Где:
^
: начало линии\*
: буквальный *
.*
: ноль или более общий символ (не новая строка)|
: буквальные трубыNB: "${filename}"
: Я предположил, что вы используете команду в скрипте с целевым файлом, переданным в двойной кавычной переменной как «$ {filename}». В оболочке просто используйте фактическое имя файла (или путь к нему).
ОБНОВЛЕНИЕ (номера строк)
Изменить эти команды для получения и номер строки из соответствующих строк. С grep
просто как добавить -n
переключатель:
grep -ne '^\*.*|' "${filename}"
Получает вывод так:
81806:* Date | Auteurs
Чтобы получить точно такой же выход из sed
и awk
мы должны усложнять команды немного :
awk '/^\*.*\|/{print NR ":" $0}' "${filename}"
# the = print the line number, p the actual match but it's on two different lines so the second sed call
sed -n '/^\*.*|/{=;p}' "${filename}" | sed '{N;s/\n/:/}'
Я обновил ответ, чтобы напечатать также номера строк, скажите, работает ли он так, как ожидалось для вас. –
он работает спасибо – malmo