2015-10-22 7 views
1

Интересно, есть ли в Linux команда, которая может помочь мне найти строку, которая начинается с «*» и содержит специальный символ «|», , напримерпоиск строки, содержащей специальный символ с помощью sed или awk

* Date  | Auteurs 
+0

Я обновил ответ, чтобы напечатать также номера строк, скажите, работает ли он так, как ожидалось для вас. –

+0

он работает спасибо – malmo

ответ

2

Просто используйте:

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/:/}'