Переместить строку, соответствующую шаблону, в начало файла (несколько files)

Для массива 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

Вывести каждый аргумент функции, кроме последнего, и повторить эхо с добавлением "," без новой строки. Затем повторите последний аргумент и новую строку.

0
27.12.2018, 17:54
3 ответа

Чтобы иметь идентификатор электронной почты в качестве заголовка или первой строки файла, используйте приведенную ниже команду для достижения того же самого:

find. -type f -iname "*.txt"  -exec sed  '1i emailid' {} \;

Приведенная выше команда будет вставлять идентификатор электронной почты в качестве первой строки каждого файла в формате.txt.

0
28.01.2020, 04:06

Вы можете перебрать файлы и использовать ed . Команда edбудет:

ed -s input <<< $'/^From.*@/m0\nw\nq'

Это редактирует файл с именем inputв сценарии -в режиме(-s)для подавления печати байтов при сохранении и выходе. Здесь -строка <<< $'... 'отправляет команды edна свой стандартный ввод. Эти команды предписывают найти строку, в которой она начинается со строки From, за которой следует что-либо, за которым следует @; в этой строке выполните команду ove mи поместите ее после нулевой строки --, чтобы сделать ее новой первой строкой. Затем wзапишите файл обратно на диск и quit.

Все, что осталось, это перебрать файлы с помощью некоторого подстановочного знака оболочки и выполнить forцикл; например:

for file in./*.txt
do
  ed -s "$file" <<< $'/^From.*@/m0\nw\nq'
done

Это редактирует ваши файлы в -месте, поэтому работайте над резервной копией, пока не будете довольны результатами.

Вы можете ужесточить шаблон поиска регулярного выражения /^From.*@/, если ваши данные поддерживают его;возможно, добавив требования для существования строки даты или для существования определенного количества субдоменов -в адресе электронной почты и т. д.

Для получения дополнительной информации о ed, установите его и запустите man edили info ed; или проверьте интерактивную справочную страницу для ed .

0
28.01.2020, 04:06

Благодаря @Kusalananda удалось заставить его работать (наконец )с помощью formail.

cat `find. -type f -name '*' -print` | formail -es >../result.mbox
0
28.01.2020, 04:06

Теги

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