2014-12-30 2 views
0

Я действительно искал этот вопрос среди других подобных вопросов здесь, но не смог найти ответа.Как использовать регулярное выражение в bash для выбора строки между двойными кавычками?

У меня есть следующий текст в файле:

TYPE_A = "1" AND TYPE_B = "6" AND TYPE_C = "8755asd-" 

Я пытаюсь Grep следующие (двойные кавычки могут содержать цифры, символы и специальные символы):

TYPE_C = "8755asd-" 

Grep что я использую это: grep -o "TYPE_C = \"[0-9a-zA-Z-]*\"" text.txt

Однако, я думаю, что регулярное выражение в этой команде не является общим.

Благодарим за помощь.

+1

что вы подразумеваете под это не родовой? – SMA

+0

Я имею в виду, что это может не включать много возможностей. Не общее решение. –

+0

@KasiyA Я уже сделал свои комментарии для всех ответов и выбрал один из них. –

ответ

1

Вы можете использовать ниже регулярное выражение, которое соответствует соответствующим TYPE только если двойные кавычки содержат все символы, которые вы упомянули. То есть, по крайней мере, персонаж, по крайней мере, число, по крайней мере, специального характера.

grep -oP 'TYPE_[A-Z]\s*=\s*"(?=[^"]*[A-Za-z])(?=[^"]*\d)(?=[^"]*[^"\w])[\W\w]*?"' file 

DEMO

Пример:

$ cat ri 
TYPE_A = "1" AND TYPE_B = "6" AND TYPE_C = "8755asd-" 
TYPE_A = "1" AND TYPE_B = "6" AND TYPE_C = "875d" 
TYPE_A = "1" AND TYPE_B = "6" AND TYPE_C = "asd-" 
TYPE_A = "1" AND TYPE_B = "6" AND TYPE_C = "875-" 
$ grep -oP 'TYPE_[A-Z]\s*=\s*"(?=[^"]*[A-Za-z])(?=[^"]*\d)(?=[^"]*[^"\w])[\W\w]*?"' ri 
TYPE_C = "8755asd-" 
0

Вы можете использовать разрез, чтобы получить тот же результат, если шаблон остается тем же.

echo 'TYPE_A = "1" AND TYPE_B = "6" AND TYPE_C = "8755asd-"' | cut -d"\"" -f6 
+0

Нет, шаблон не остается таким же. –

1

Я хотел бы сделать это с sed:

sed -n '[email protected]* TYPE_C = "\([0-9a-zA-Z-]*\)".*@\[email protected]' text.txt 

То есть -n, чтобы не печатать строки, которые не соответствуют. Затем замените всю строку с частью в двойных кавычках после TYPE_C и p напечатать результат:

8755asd- 
+0

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