как использовать tr или sed для замены разрывов строк в файле YAML на однострочную строку с '\ n' - PullRequest
0 голосов
/ 06 февраля 2019

Я использую оболочку bash и пытаюсь обработать текстовый файл, чтобы заменить разрывы строк одной строкой на "\ n".Пример:

Исходный файл:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LOOOONG-STRING
    server: https://1.2.3.4:8443
  name: cluster-name
contexts:
- context:
    cluster: cluster-name
    user: cluster-admin
  name: cluster-admin@cluster-name
current-context: cluster-admin@cluster-name
kind: Config
preferences: {}
users:
- name: cluster-admin
  user:
    client-certificate-data: LOOOONG-STRING
    client-key-data: LOOOONG-STRING

Желаемый вывод

apiVersion: v1\nclusters:\n- cluster:\n    certificate-authority-data: LOOOONG-STRING\n    server: https://1.2.3.4:8443\n  name: cluster-name\ncontexts:\n- context:\n    cluster: cluster-name\n    user: cluster-admin\n  name: cluster-admin@cluster-name\ncurrent-context: cluster-admin@cluster-name\nkind: Config\npreferences: {}\nusers:\n- name: cluster-admin\n  user:\n    client-certificate-data: LOOOONG-STRING\n    client-key-data: LOOOONG-STRING

Я пробовал много примеров tr и sedздесь и не может сделать это.Благодарю.

1 Ответ

0 голосов
/ 06 февраля 2019

Попробуйте это:

sed -e :a -e '$!N;s/\n/\\\n/;ta' file

В Gnu sed вам может понадобиться экранировать новую строку только один раз:

sed -e :a -e '$!N;s/\n/\\n/;ta' file

Все строки объединяются и символы новой строки заменяются на \\\n.

Вы можете добавить флаг -i для редактирования файла на месте или перенаправления вывода в новый файл:

sed -e :a -e '$!N;s/\n/\\\n/;ta' file > newfile
...