2016-11-01 4 views
-3

У меня есть файл, ABDC.DELTA00.TS.D20161022.TS_BAR99.DAT.DOCC.Извлечение строки между двумя строками

Я хочу вырезать текст между двумя строками: первые TS и DOCC. Я попытался

efvar4=$(echo $filename | sed -n "s/.*TS//;s/DOCC.*//p") 

в результате _BAR99.DAT – соответствия в имени файла второй TS.

Желаемый результат: .TS.D20161022.TS_BAR99.DAT.

Как изменить мой SED команды, чтобы достичь желаемого результата?

+0

regexes are greedy. поэтому '. * TS' будет соответствовать как можно большей части строки, что означает, что она будет соответствовать LAST' TS' в строке. –

+0

Спасибо Marc B, есть способ добиться желаемого результата –

+0

'(TS. * \. DOCC)' вместо? что заставит его максимально соответствовать между TS/DOCC, захватив «вторую» часть в качестве части этого. –

ответ

0
echo "ABDC.DELTA00.TS.D20161022.TS_BAR99.DAT.DOCC" | sed 's/^.*\.TS\./.TS./;s/\.DOCC/./' 
+0

awesome, это работает. Я попробую называть их переменными. –

+0

Stro - Я попытался вызвать переменные, но я не получаю тот же результат. ==> эхо $ v1 TS ==> эхо $ v2 DOCC ==> эхо $ имя_файла ABDC.DELTA00.TS.D20161022.TS_BAR99.DAT.DOCC ==> эхо $ имя_файла | sed "s /^.*\.$ v1 \ ./.$ v1 ./; s/\ $ v2> .TS.D20161022.TS_BAR99.DAT.DOCC Желаемый результат: .D20161022.TS_BAR99.DAT. –

+0

'' '#/бен/Баш v1 = TS v2 = DOCC имя_файла = ABDC.DELTA00.TS.D20161022.TS_BAR99.DAT.DOCC эхо $ имя_файла |! СЭД«s /^.*\.$ v1 \ ./.$ v1./;s/\.$v2// "' '' – strobelight

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