Как извлечь интересную часть вывода в Bash

Мой вывод команды выглядит так:

File Size                       : 23 kB
File Size                       : 9.8 kB
File Size                       : 9 kB
File Size                       : 128 kB
File Size                       : 921.8 kB

Как извлечь из этого к этому:

23kB
9.8kB
9kB
128kB
921.8kB

Я пытался использовать sed с командой

sed 's/^..................................//'

вывод -

23 kB
9.8 kB
9 kB
128 kB
921.8 kB

, и на этом мои знания о sed и regex заканчиваются. Как это сделать?

2
задан 19 July 2019 в 11:42

4 ответа

Вы хотите удалить все перед двоеточием и удалить все пробелы:

sed 's/.*://; s/ //g' file

Первые замены замены .*:, т.е. что-либо до последнего двоеточия, ни с чем. Вторая замена ничем заменяет пространство глобально.

3
ответ дан 2 December 2019 в 01:27

Я использовал бы cut вместо sed:

Установите разделитель на двоеточие и выберите второе поле:

cut -d ':' -f 2 file

Вывод:

 23 kB
 9.8 kB
 9 kB
 128 kB
 921.8 kB

Затем удалите пробелы с tr -d:

cut -d ':' -f 2 file | tr -d ' '

Вывод:

23kB
9.8kB
9kB
128kB
921.8kB
6
ответ дан 2 December 2019 в 01:27

Можно объединить отдельные замены в цепочку:

's/^.*: //; s/ //'

Но парсинг подробных команд как этот всегда является небольшим chonky и ненадежный. Я предложил бы, чтобы чему-то понравилось, находят (с любыми фильтрами, в которых Вы нуждаетесь), и объединение в цепочку это в stat, как это:

find . -exec stat --printf="%s\n" {} +

Посмотрите man stat для большего количества опций на выводе.

2
ответ дан 2 December 2019 в 01:27

Используя awk:

awk -F\: '{gsub(/ /, ""); print $2}'

Это будет использовать : как разделитель, удалите все пробелы и распечатайте второй столбец.

0
ответ дан 2 December 2019 в 01:27

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

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