#linux #unix #grep
#linux #unix #grep
Вопрос:
У меня есть текстовый файл, install.history
Wed June 20 23:16:32 CDT 2014, EndPatch, FW_6.0.0, SUCCESS
Мне нужно было бы только распечатать слово, начиная с EndPatch
конца, то есть FW_6.0.0, SUCCESS
Приведенная ниже команда, которую я только распечатал EndPatch
, так что мне нужно сделать, чтобы она распечатала оставшиеся слова, чтобы мой результат был:
EndPatch, FW_6.0.0, SUCCESS
Вот команда, которая у меня есть:
grep -oh "EndPatch[[:alpha:]]*" 'install.history'
Ответ №1:
Возможно, это проще сделать с sed
:
sed -n 's/.*EndPatch, //p' install.history
чтобы получить слово после завершения:
sed -n 's/.*EndPatch, ([^,]*).*/1/p' install.history
или:
sed -n 's/.*EndPatch, //p' install.history | cut -d, -f
Комментарии:
1. Или просто
sed 's/.*EndPatch, //g' file
2. Привет @perreal, что, если бы я хотел только следующее слово после «EndPatch», которое является FW_6.0.0?
Ответ №2:
Вы можете попробовать приведенную ниже команду grep, чтобы получить все, начиная с EndPatch
последнего,
grep -oP 'EndPatch, (.*)$' file
или
grep -o 'EndPatch.*$' file
Пример:
$ grep -oP 'EndPatch, (.*)$' file
EndPatch, FW_6.0.0, SUCCESS
$ grep -o 'EndPatch.*$' file
EndPatch, FW_6.0.0, SUCCESS
Или
Вы можете попробовать следующую команду, чтобы получить все символы, которые были сразу после EndPatch,
$ grep -oP 'EndPatch, K(.*)$' file
FW_6.0.0, SUCCESS
Комментарии:
1. Привет, Авинаш, я попробовал это — файл $ grep -oP ‘EndPatch, K (. *) $’. И на выходе получается «EndPatch, FW_6.0.0, УСПЕХ» вместо «FW_6.0.0, УСПЕХ». Есть идеи?
2. Его заглавная буква k, а не маленькая буква k.
3. Это моя команда, grep -oP ‘EndPatch, K(.*) $’ /homenfs/sandbox/FU_HOME/install.history >> Output.txt Но он не работает, он не показывает никаких выходных данных.
Ответ №3:
Вам нужно grep -e
для сопоставления регулярных выражений
grep -oh 'install.history' -e "EndPatch[[:alpha:]]*"
Ответ №4:
Вы можете использовать awk
awk -F "EndPatch, " '{print FS$2}' file
EndPatch, FW_6.0.0, SUCCESS