2015-07-04 2 views
0

Что было бы самым простым способом grep text между двумя ключевыми словами в unix?Как получить текст между ключевыми словами в переменной unix

пример:

unix_var="line1\nline2\n start_keyword \n ..........\n end_keyword ........" 

мне нужно разобрать текст между start_key и end_key включительно.

Я попытался использовать sed, но не смог получить желаемый результат.

echo "line1\nline2\n start_keyword \n ..........\n end_keyword ........" | sed -n '/ start_keyword/,/end_keyword/p' 
line1\nline2\n start_keyword \n ..........\n end_keyword ........ 

Прошу совета.

+0

Ваша проблема в том, что эхо не интерпретирует '\ n'. Вам нужно использовать 'echo -ne' или' printf'. – ikrabbe

ответ

0

Использование grep -o:

echo "$unix_var" | grep -o 'start_keyword.*end_keyword' 
start_keyword \n ..........\n end_keyword 

Если у вас есть BASH, то вы можете сделать это в BASH сам:

[[ $unix_var =~ (start_keyword.*end_keyword) ]] && echo "${BASH_REMATCH[1]}" 
start_keyword \n ..........\n end_keyword 
0

Вот пример

echo -ne "line 1\nline 2\nstart key\nmid line\nend key\nlast line\n"|sed -ne '/^start key/,/^end key/p' 

, который работает для меня.

0
unix_var="line1\nline2\n start_keyword \n ..........\n end_keyword ........" 

Простой способ извлечения текста между start_keyword и end_keyword должен использование экстракция подстроки или удаление подстроки. Примером может быть:

text=${unix_var##*start_keyword} # remove from start through start_keyword 
text=${text%end_keyword*}  # remove from end through end_keyword 

Требуемая текст теперь в text. Использование удаление подстроки:

text=${unix_var/*start_keword/} 
text=${text/end_keyword*/} 

Результат будет таким же в text.

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