Как добавить размер файла, вывод вместе

sed "/<\/head>/i\
$strToInsert" file.html

Это вставит новую строку перед каждым , но почему у вас больше одной?

-2
03.10.2018, 04:23
4 ответа

Используйте bash $(( ))для арифметики:

ACC=0
for i in $(command to get sizes); do ACC=$((i + ACC)); done
echo $ACC
1
28.01.2020, 05:14

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

$ paste -sd + file | bc
12283035
1
28.01.2020, 05:14

Поместите свои номера в файл с именем "file.txt", затем

var=$(cat file.txt)
echo $((${var//$'\n'/+}))

В основном паттерн в аритмическом выражении имеет вид :${parameter//find/replace}, или в нашем примере ${var// /+}. Это Расширение параметра Bash:

- `\n` will add blank spaces between the numbers in the list
- The double slashes `//` are for replacing all occurrences of space with `+` sign, if you put one slash `/`, only first space is going to be replaced. The space is there because you are replacing space with plus sign.

Предыдущее решение можно упростить следующим образом:

var=echo $(< file.txt)
echo $((${var// /+}))

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

Подробнее здесь

3
28.01.2020, 05:14

Из этого списка команд ни одна из них не может складывать числа, поэтому я полагаю, что идея состоит в том, что должны использоваться арифметические расширения оболочки.

Что-то вроде:

echo "$(($(LC_ALL=C ls -nq | tr -s ' ' | cut -d ' ' -f5 | tail -n +2 | tr '\n' +)0))"

(здесь предполагается, что ни один из файлов не является файлом устройства, для которого выходные данные ls -lне имеют размер в 5 столбце, а старший номер устройства ).

Обратите внимание, что вывод ls -lили ls -nзависит от локали и не указывается в локалях, отличных от C/ POSIX.

Кроме того, без -qэто не будет работать для файлов, имя или цель символической ссылки которых содержат символы новой строки.

Неиспользование -qбудет означать уязвимость внедрения произвольной команды запустите ли вы команду в каталоге, где кто-то может создать файлы с вредоносными именами (попробуйте, например, после запуска ln -s $'\nx x x x a[$(reboot)0]' xбез-q)

Вам нужно -nвместо -l, так как с -lвы получаете имена пользователей/групп вместо идентификаторов, которые могут содержать символы пробела.

Обратите внимание, что tail +2устарел. Стандартный синтаксис — tail -n +2.

3
28.01.2020, 05:14

Теги

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