#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
Примечания:
- Все три используют один и тот же символ привязки
^
, указывающий начало строки и$
означающий литерал$
- Поскольку
$
это метасимвол регулярного выражения, означающий конец строки, его необходимо экранировать,$
, или вы можете использовать символьный класс, чтобы сделать его буквальным[$]
- Регулярное выражение
/^$/
с неэкранированным$
будет регулярным выражением для пустой строки, поскольку^
означает начало строки и$
означает конец строки. - Вам не нужно использовать
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
? UUOC2. Особой необходимости в a нет
cat
, я просто следовал способу OP (я лично тестировалgrep '^$' test_file
)