Обрезать строку с помощью sed

У меня есть команда, которая выводит мне список со следующим шаблоном

exp_70_T8_s1
exp_71_T8_s5
exp_72_T8_s10
exp_73_T10_s1
exp_74_T10_s5
exp_75_T10_s10
...

Как я могу получить числа после «_T» и «_s» соответственно, используя sed или что-то подобное в bash ? Результат должен выглядеть так:

8
8
8
10
10
10

и

1
5
10
1
5
10

для _T и _s соответственно

. Первая часть моей команды выглядит например:

for f in $(find . -name "someFile.txt" | sort); do echo $f; done | grep /someFolderName/ 

В принципе, я хотел бы добавить команду в значение, указанное выше.

1
задан 5 April 2016 в 17:45

1 ответ

Использование AWK:

command | awk -F_T\|_s '{print $2}'
command |
    awk -F_T\|_s '
        {
            print $2
        }
    '

и:

command | awk -F_T\|_s '{print $3}'
command |
    awk -F_T\|_s '
        {
            print $3
        }
    '

Где command - команда, которая выводит файл.

-F_T\|_s: устанавливает _T и _s в качестве разделителей входных полей; {print $2}: печатает второе поле. {print $N}: печатает третье поле.
% cat file
exp_70_T8_s1
exp_71_T8_s5
exp_72_T8_s10
exp_73_T10_s1
exp_74_T10_s5
exp_75_T10_s10
% cat file | awk -F_T\|_s '{print $2}'
8
8
8
10
10
10
% cat file | awk -F_T\|_s '{print $3}'
1
5
10
1
5
10
5
ответ дан 23 May 2018 в 12:22

Другие вопросы по тегам:

Похожие вопросы: