Извлекать только строки, имеющие знак доллара в начале

#regex #linux #awk #sed #grep

#регулярное выражение #linux #awk #sed #grep

Вопрос:

У меня есть файл, который $ находится в начале, я просто хочу извлечь эти строки из файла.

Ниже приведен мой файл.

cat test_file

 $ oc adm groups new dev-group
group.user.openshift.io/dev-group created
4.2. Add the developer user to dev-group.
$ oc adm groups add-users dev-group developer
group.user.openshift.io/dev-group added: "developer"
4.3. Create a second group called qa-group.
$ oc adm groups new qa-group
group.user.openshift.io/qa-group created
4.4. Add the qa-engineer user to qa-group.
$ oc adm groups add-users qa-group qa-engineer
group.user.openshift.io/qa-group added: "qa-engineer"
  

Что я пробовал:

 # cat test_file | grep "($w )[(w*[a-z]w*)]"

and 

# cat test_file | grep '$$$'
  

Ожидаемый:

 $ oc adm groups new dev-group
$ oc adm groups add-users dev-group developer
$ oc adm groups new qa-group
$ oc adm groups add-users qa-group qa-engineer
  

Я поискал в Google, данное решение не сработало для меня, я работаю на ubuntu 14

Комментарии:

1. Спасибо, что продемонстрировали свои усилия в виде кода, не могли бы вы, пожалуйста, добавить ожидаемый образец вывода для ясности в вашем вопросе, спасибо.

2. @RavinderSingh13, спасибо, я только что обновил желаемый результат.

3. разве это не так просто, как grep '^[$]' myFile

Ответ №1:

Вы можете использовать awk :

 $ awk '/^$/' file
  

Также sed :

 $ sed -ne '/^$/p' file
  

Или grep :

 $ grep '^$' file
  

Примечания:

  1. Все три используют один и тот же символ привязки ^ , указывающий начало строки и $ означающий литерал $
  2. Поскольку $ это метасимвол регулярного выражения, означающий конец строки, его необходимо экранировать, $ , или вы можете использовать символьный класс, чтобы сделать его буквальным [$]
  3. Регулярное выражение /^$/ с неэкранированным $ будет регулярным выражением для пустой строки, поскольку ^ означает начало строки и $ означает конец строки.
  4. Вам не нужно использовать cat в качестве входных данных sed , awk , или grep . Каждый из них может читать файл напрямую, и это обычно предпочтительнее, чем чтение файла. (См. Бесполезное использование Cat)

Комментарии:

1. Альтернатива для sed sed '/^$/!d' file

2.@potong: да, или sed '/^[^$]/d' file тоже работает. Я пытался сделать все три регулярных выражения одинаковыми для awk sed или grep

Ответ №2:

Если вам нужны только строки, начинающиеся с a $ , просто добавьте ^ , что указывает на начало строки, а затем экранированный доллар:

 cat test_file | grep  '^$'
  

Комментарии:

1. По какой-либо причине вам нужно cat ? UUOC

2. Особой необходимости в a нет cat , я просто следовал способу OP (я лично тестировал grep '^$' test_file )