Объединить текстовый файл в одну строку, удалив табуляцию и двойные запятые (ключ DKIM)

Проблема в том, что файловая система оверлея не поддерживает переименование файлов.

Существует конфигурация ядра CONFIG _OVERLAY _FS _REDIRECT _DIR, которая включает эту функцию и доступна для версии ядра выше 4.10, но наша версия ядра Linux — 3.9; Так что это не наш вариант.

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/filesystems/overlayfs.txt

Другой подход состоит в том, чтобы изменить путь по умолчанию в /etc/libuser.conf для теневых и пользовательских файлов на каталог для чтения/записи вместо /etc и скопировать туда файлы.

Таким образом, все изменения и переименования выполняются в каталоге для чтения/записи, и этот путь указывается как верхний каталог для команды монтирования оверлея.

mount -t overlay overlay -o lowerdir=/etc,upperdir=/data/etc,workdir=/data/overlayfs_workdir  /etc

0
24.06.2019, 03:31
2 ответа

Если предположить, что:

  • в начале некоторых строк есть табуляции (не пробелы ).
  • вы хотите сказать :«Удалите двойные кавычки, (некоторые )пробелы и табуляции образуют открывающую скобку с закрывающей скобкой»
  • что вы хотите оставить пробелы для удобства чтения
  • и что вы хотите снова ввести двойные кавычки, окружающие текст внутри круглых скобок

Этот код bash сделает это:

#!/bin/bash

str='mail._domaikey IN  TXT ( "v=DKIM1; k=rsa; t=s; s=email; "
    "p=MBIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AEIIBCgKCAQEAxZfSF9WkStkz1A0tbSNWAEdyHiWfenEeihvzVn8mCOx7nsUBYnEDocbDb8P0pTHS8MVNZ4jhXSwkg5mc6+NVgyZIctSogUMdD1ddGsYDfUHgT/d5tsVTzecgRtTtpdxibRyh1HY5Zmg2wxFLuCPqMPVeJHjwfKwwQHHCQtIVH+b+QvmF6hxODu73UwNUaG1cr8UkLqoQexTGoS"
    "qqmGCYGKk5ImzSIoa40L1gpcSPtIWbsVTSXK1FLsovGHd7NMmEHBgv2WabpDL4BQeEfSZC0Rk5sZEaWrepiHBiTcNjhb5tyLkgxmUIW21sOA+2kmChQUwyp10qDaP5h/+s7R0arQIDAQAB" )  ; ----- DKIM key mail for domain.com'

reg='(^[^(]*\()([^)]*)(\).*)$'                       # split the text into parts
[[ "$str" =~ $reg ]] && a=("${BASH_REMATCH[@]:1}")   # capture in var `a` only the
                                                     # regex capture parentheses.

a[1]="${a[1]//[\"$' \n\t']}"                         # remove double quotes (")
                                                     # space, tab and newlines

a[1]="${a[1]//;/; }"                                 # add some spaces back.

printf '%s "%s" %s\n' "${a[@]}"                      # print parts formatted.
0
28.01.2020, 02:40

cat input.txt | tr -d '\n\r\t\"' > output.txt
Это должно работать нормально.

1
28.01.2020, 02:40

Теги

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