2013-06-27 4 views
1

Предположим, у меня есть этот кусок текста:Как извлечь текст между строкой и символом прямо перед ним?

GINC/weary/crazy/RMSD=2316

Я надеялся, что есть способ, чтобы извлечь то, что лежит между второй прямой косой черты / и /RMSD=2316. Другими словами, я хочу найти строку /RMSD=2316 и извлечь все, что лежит между ней, и переднюю косую черту, которая предшествует ей.

ответ

1

насчет

cut -d/ -f3 

-d/ является слэш разделителем

-f3 означает третий столбец

2

Использование СЭД, без каких-либо предположений позиционных:

echo 'GINC/weary/crazy/RMSD=2316' | \ 
     sed -n 's!.*/\([^/]*\)/RMSD=2316.*!\1!p' 
2

С awk:

awk -F/ '{for(i=1;i<=NF;i++) if($i=="RMSD=2316") print $(i-1)}' t 
1

Поскольку вы отметили это bash

var='GINC/weary/crazy/RMSD=2316' 
var1=${var%/RMSD=2316} 
echo $var1 
echo ${var1##*/} 
1

Вы можете использовать sed:

sed 's/.*\/\([^\/]\+\)\/RMSD=2316/\1/' 

Это соответствует всему тексту, ведущему к переднему слэшу, захватывает все не Форвард косые символы, ведущие до /RMSD=2316, и заменяет весь матч захваченными символами. Решение

1

Perl:

str=GINC/weary/crazy/RMSD=2316 
echo "$str" | perl -ne 'print "$1\n" if m|.*?/.*?/(.*)/RMSD=2316|'