Недопустимая ссылка \ 1 с использованием sed при попытке распечатать соответствующее выражение

Прежде чем начать, я уже рассмотрел этот вопрос , но, похоже, решение заключалось в том, что они не избегали скобок в своем регулярном выражении. У меня такая же ошибка, но я не группирую регулярное выражение. Я хочу найти все имена / имена пользователей в файле lastlog и вернуть ТОЛЬКО UN.

Что у меня есть:

    s/^[a-z]+ |^[a-z]+[0-9]+/\1/p

Я видел много решений, которые показывают, как это сделать в awk, что отлично подходит для справок в будущем, но я хочу сделать это с помощью sed.

Отредактируйте, например, ввод:

    dzhu             pts/15   n0000d174.cs.uts Wed Feb 17 08:31:22 -0600 2016
    krobbins                                   **Never logged in**
    js24                                       **Never logged in**

person Autumn Salinas    schedule 17.09.2017    source источник
comment
Как вы думаете, для чего нужен \1?   -  person melpomene    schedule 17.09.2017
comment
Предлагаю взглянуть на 5.7 Обратные ссылки и Подвыражения.   -  person Cyrus    schedule 17.09.2017
comment
включение небольшого образца ввода и ожидаемого результата поможет нам прояснить ваше мнение. Удачи.   -  person shellter    schedule 17.09.2017


Ответы (1)


Вы не можете использовать обратные ссылки (например, \1), если у вас нет групп захвата в первой части вашей команды подстановки.

Предполагая, что вам нужно первое слово в строке, вот команду, которую вы можете запустить:

sed -n 's/^\s*\(\w\+\)\s\?.*/\1/p'

Объяснение:

  • -n подавляет стандартное поведение sed для печати каждой обрабатываемой строки
  • ^\s* соответствует началу строки, за которой следует любое количество пробелов
  • \(\w\+\) захватывает один или несколько символов слова (буквы и цифры)
  • \s\?.* соответствует одному или нулю пробелов, за которыми следует любое количество символов. Это необходимо для того, чтобы мы соответствовали всему слову в группе захвата.
  • \1 заменяет совпавшую строку захваченной группой
  • Флаг p печатает строки, соответствующие выражению. В сочетании с -n это означает, что будут распечатаны только совпадения.

Надеюсь, это поможет!

person alexbclay    schedule 17.09.2017
comment
Можете ли вы отредактировать свой пост с его отформатированной версией? Я не могу сказать, где должны быть новые строки в комментарии, и не хочу предполагать. - person alexbclay; 19.09.2017
comment
Отредактировано. Надеюсь, это то, что вы ищете. - person alexbclay; 20.09.2017