Эта команда использует только функции POSIX find
и ls
:
find . -type f -mtime +10 -exec ls -lS {} +
Однако это может вызывать ls
более одного раза, если в текущем каталоге (или рекурсивно подкаталогах) имеется очень большое количество файлов, соответствующих -mtime +10
первичный.
Если он вызывает ls
более одного раза, конечно, сортировка будет выполняться только в каждом выполнении ls
, а не в нескольких выполнениях.
Тем не менее, для разумного количества файлов это, вероятно, ваш лучший выбор.
В bash для форматирования вывода можно использовать printf
.
for i in {0..255} ; do
printf "#define ICFG%-3d 0x2%03X\n" $i $((i*4))
done > insert.txt
%d
означает десятичное целое число, 3
— размер, минус означает выравнивание по левому краю. X
означает шестнадцатеричный регистр, 3
— длину, 0
означает 0 -с дополнением. $((... ))
вводит арифметическое расширение.
Затем просто используйте sed
, чтобы вставить его в свой файл
sed -i~ 500rinsert.txt input.txt
Или вы можете использовать Perl:
perl -i~ -pe 'if ($. == 500) {
printf "#define ICFG%-3d 0x2%03X\n", $_, $_ * 4 for 0.. 255 }
' -- input.txt
$.
— номер строки ввода %-3d
и%03X
)awk '{print}; FNR == 500 {for (i = 0; i < 256; i++)
printf "#define ICFG%d\t%#x\n", i, 0x2000 + i*4}' < file.h
Чтобы отредактировать файл на месте -, замените awk
на gawk
и добавьте параметр -i inplace
(и передайте путь к файлу в качестве аргумента вместо подачи его содержимого на стандартный ввод awk
.):
gawk -i inplace '{print}; FNR == 500 {for (i = 0; i < 256; i++)
printf "#define ICFG%d\t%#x\n", i, 0x2000 + i*4}' file.h
С помощью zsh
или ksh93
вместо bash
вы также можете создать этот текст с помощью:
printf '#define ICFG%d %#x\n' {0..255}{,"*4+0x2000"}
bash
как и ksh93
скопировал {0..255}
из zsh
, но не принимает произвольные арифметические выражения в аргументах для printf
, поэтому вам нужно будет использовать там цикл.