Я сохраняю вывод терминала 2>&1 | tee ./ results.txt
в a .txt
файл, который имеет следующий текст:
executing: ./home/images/image-001-041.png
0,33, /results/image-001-041.png
1.7828,32, /results/image-001-040.png
1.86051,34, /results/image-001-042.png
1.90462,31, /results/image-001-039.png
1.90954,30, /results/image-001-038.png
1.91953,35, /results/image-001-043.png
1.92677,28, /results/image-001-036.png
1.92723,3160, /results/image-037-035.png
1.93353,7450, /results/image-086-035.png
1.93375,1600, /results/image-019-044.png
Я должен взять вторые числа (после того, как первый знак запятой, т.е. 33,32,34...), и сохраните его в списке в Python
. Какова команда удара или команда регулярного выражения в Python?Спасибо
Используя cut
:
cut -sd',' -f2 < result.txt
из man cut
:
-d, --delimiter=DELIM
use DELIM instead of TAB for field delimiter
-s, --only-delimited
do not print lines not containing delimiters
-f, --fields=LIST
select only these fields; also print any line that contains
no delimiter character, unless the -s option is specified
Вы можете использовать awk
awk -F ',' '{print $2}' results.txt
Определить запятую в качестве разделителя полей и напечатать второй столбец.
Пример с sed
$ sed -rn 's/[^,]+,([^,]+),.*/\1/p' results.txt
33
32
34
31
30
35
28
3160
7450
1600
-n
ничего не печатайте, пока мы не просим его (удаляет несогласующие отрезки длинной линии),-r
используйте ДО (таким образом, нам не нужны обратные косые черты для +
и (
)
метасимволы)[^,]+,
некоторые незапятые сопровождаются запятой([^,]+),
сохраните некоторые незапятые, сопровождаемые запятой на потом (мы только хотим эту часть),.*
любое количество любых символов (избавляется от остальной части строки),\1
шаблон мы сохранилиp
распечатайте строки, которые мы изменили (необходимый с -n
)Так как Вы упоминаете Python:
with open('results.txt') as results:
ids = [int(line.split(',')[1]) for line in results if ',' in line]
print(ids)
Это создает список целых чисел как ids
, и дисплеи это:
[33, 32, 34, 31, 30, 35, 28, 3160, 7450, 1600]
Можно использовать Perl, который подобен awk и sed отправленным решениям.
-a
включает автоматическое разделение на каждой строке.
-F
используется для определения разделителя для разделения каждой строки. Это принимает значение по умолчанию к ''. Затем результат хранится в @F. Следовательно $F [1] дает нам второй столбец.
-l
удостоверяется, что новая строка добавляется к каждой строке.
-e
используется для определения команды, которую мы должны выполнить на каждой строке, которая является печатью
$ perl -F, -ale 'print $F[1]' results.txt
33
32
34
31
30
35
28
3160
7450
1600
Вышеупомянутое расширяется до ниже программы:
$ perl -MO=Deparse -F, -ale 'print $F[1]' results.txt
BEGIN { $/ = "\n"; $\ = "\n"; }
LINE: while (defined($_ = readline ARGV)) {
chomp $_;
our @F = split(/,/, $_, 0);
print $F[1];
}
-e syntax OK