2013-03-26 5 views
4

Как я sed, grep, awk, tr или что-то в bash script, чтобы получить первое вхождение в строке характеров междуПолучить строку между двумя специальными символами

'  and  .  

из этого файла. (Символ - это одиночная кавычка и период). Это очень сложно, мне нравится, что ты даже пытаешься.

Так что команда дает:

Идеальный выход:

orinak 
pchovi 
orinak 

xpt 

moon 

на следующий файл:

class GI_DnConstants { 
     const BO_DOMAIN_NAME = 'orinak.backoffice.domain.com'; 
     const EX_DOMAIN_NAME = 'pchovi.extranet.domain.com'; 
     const WS_DOMAIN_NAME = 'orinak.www.domain.com'; 
     const PT_DOMAIN_NAME = '.partner.domain.com'; 
     const PTS_DOMAIN_NAME = 'xpt.partners.domain.com'; 
     const WS_SECURE_DOMAIN_NAME = '.secure.domain.com'; 
     const IMG_DOMAIN_NAME = 'moon.images.domain.com'; 
} 
+0

Вам также нужны пустые строки? – Kent

+0

Да, потому что это покажет мне, что произошло неправильное конфигурирование. Теперь он работает с ответом Taoufix. –

ответ

4

если пустые строки в выводе не требуется, это Grep с «смотреть вокруг» даст то, что вы хотите:

grep -Po "(?<=')[^.']*(?=\.)" file 

просто видел, как ты меченый вопрос с AWK

затем попробуйте это AWK с этих пустых строк в выходной:

awk -F"['.]" 'NF>2{print $2}' file 

(AWK один-лин er работает для вашего ввода в примере)

1

Попробуйте это:

sed -n "s/.*'\([^\.]*\)\..*/\1/p" input_file.txt 

Run:

$ sed -n "s/.*'\([^\.]*\)\..*/\1/p" input_file.txt 
orinak 
pchovi 
orinak 

xpt 

moon 


$ sed --version 
GNU sed version 4.2.1 
Copyright (C) 2009 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, 
to the extent permitted by law. 

GNU sed home page: <http://www.gnu.org/software/sed/>. 
General help using GNU software: <http://www.gnu.org/gethelp/>. 
E-mail bug reports to: <[email protected]>. 
Be sure to include the word ``sed'' somewhere in the ``Subject:'' field. 
+0

Я не знаю, какую версию sed вы используете, но эта команда дает точный результат, о котором вы просите, см. Обновление. – Taoufix

+0

Это здорово, это сработало! Вопрос только в том, как я могу теперь перебросить каждую из этих строк в массив, который я могу пересечь с помощью цикла? –

0

Быстрый и грязный:

egrep -o "'[^\.,;]+" file | cut -c2- 

Примечание: не печатать пустые строки.

+1

Спасибо за редактирование, 'cat' был бесполезен – Atropo

Смежные вопросы