2015-10-21 1 views
-1

Как найти определенную строку в файле и отобразить строку и оставшуюся строку?Отобразить строку с привязкой к концу строки

Для ПРИМЕР- У меня есть строка в a.txt:

This code gives ORA-12345 in my code. 

Итак, я найти строку 'ORA-'

Выход Должно быть:

ORA-12345 in my code 

Пробовал с помощью Grep:

grep 'ORA-*' a.txt 

, но он дает целую строку на выходе.

+1

Использование 'grep' -' Grep -o -E 'ORA- [0-9] +' '. Используя 'sed' -' sed -n 's /^.* \ (ORA- [0-9] * \). * $/\ 1/p''. – alvits

ответ

2
# Create test data: 
echo "junk ORA-12345 more stuff" > a.tst 
echo "junk ORB-12345 another stuff" >> a.tst 
# Actually command: 
# the -o (--only-matching) flag will print only the matched result, and not the full line 
cat a.tst | grep -o 'ORA-.*$' # ORA-12345 more stuff 

Как fedorqui отметил, вы можете использовать:

grep -o 'ORA-.*$' a.tst 
+0

примечание 'файл кошки | grep ... 'не обязательно, вы можете прямо сказать' grep ... file'. – fedorqui

0

Дополнительный ответ в AWK:

awk '$0 ~ "ORA" {print substr($0, match($0, "ORA"))}' a.tst 

С наизнанку, вот что происходит:

match($0, "ORA") находит, где в строке ORA появляется. В этом случае это будет позиция 17.

substr($0, match($0, "ORA")) затем возвращается с позиции 17 до конца строки.

$0 ~ "ORA" гарантирует, что вышеуказанное применяется только к тем линиям, которые содержат ORA.

+0

Не будет '/ ORA /' и '$ 0 ~" ORA "' быть одинаковым? – andlrc

+1

Это может быть упрощено: 'i = index ($ 0," ORA ") {print substr ($ 0, i)}'. – Thor

+0

@ dev-null, yup, afaik. – Andrew

0

с sed

echo "This code gives ORA-12345 in my code." | sed 's/.*ORA-/ORA-/' 
Смежные вопросы