Для массива a = (1 2 3 4 5)
Если вы можете изменить массив:
for (( i=$((${#a[@]}-1)); i-->0; )); do a[i]+=","; done echo "${a[@]}" 1, 2, 3, 4, 5
$ (($ {# a [@ ]} - 1))
вычисляет предпоследний индекс массива, а a [i] + = ","
добавляет строку.
Если вы хотите сделать это в функции:
print_with_commas() { while [[ $# -gt 1 ]];do echo -n "$1, ";shift;done;echo "$1" } print_with_commas "${a[@]}" 1, 2, 3, 4, 5
Вывести каждый аргумент функции, кроме последнего, и повторить эхо с добавлением ","
без новой строки. Затем повторите последний аргумент и новую строку.
Чтобы иметь идентификатор электронной почты в качестве заголовка или первой строки файла, используйте приведенную ниже команду для достижения того же самого:
find. -type f -iname "*.txt" -exec sed '1i emailid' {} \;
Приведенная выше команда будет вставлять идентификатор электронной почты в качестве первой строки каждого файла в формате.txt.
Вы можете перебрать файлы и использовать ed . Команда ed
будет:
ed -s input <<< $'/^From.*@/m0\nw\nq'
Это редактирует файл с именем input
в сценарии -в режиме(-s
)для подавления печати байтов при сохранении и выходе. Здесь -строка <<< $'... '
отправляет команды ed
на свой стандартный ввод. Эти команды предписывают найти строку, в которой она начинается со строки From
, за которой следует что-либо, за которым следует @
; в этой строке выполните команду ove m
и поместите ее после нулевой строки --, чтобы сделать ее новой первой строкой. Затем w
запишите файл обратно на диск и q
uit.
Все, что осталось, это перебрать файлы с помощью некоторого подстановочного знака оболочки и выполнить for
цикл; например:
for file in./*.txt
do
ed -s "$file" <<< $'/^From.*@/m0\nw\nq'
done
Это редактирует ваши файлы в -месте, поэтому работайте над резервной копией, пока не будете довольны результатами.
Вы можете ужесточить шаблон поиска регулярного выражения /^From.*@/
, если ваши данные поддерживают его;возможно, добавив требования для существования строки даты или для существования определенного количества субдоменов -в адресе электронной почты и т. д.
Для получения дополнительной информации о ed
, установите его и запустите man ed
или info ed
; или проверьте интерактивную справочную страницу для ed .
Благодаря @Kusalananda удалось заставить его работать (наконец )с помощью formail
.
cat `find. -type f -name '*' -print` | formail -es >../result.mbox