удалите Возврат каретки с ударом

У меня есть файл Ldif, из которого я извлек бы некоторые строки.

LDIF является 78 символами с методической точностью, поэтому каждый раз, когда существует строка, содержат больше чем 78 символов, это собирается быть разделенным на две строки.

то, что я хочу, должно считать строку, которые содержат 78 символов, и раз так я удалю возврат каретки для восстановления моей строки снова.

таким образом, я ищу функцию или любой другой способ рассчитать, если строка является 78 символами, и удалите возврат каретки раз так.

пример:

description: Gestion des acces de la CR 902 sur les environnements Big Data en
  ecriture
distinguishedName: CN=GU_902_A_D5_IC_W,OU=Groupes,OU=CR 902,OU=CAM,DC=LDSCOMPT
 ES
instanceType: 4
whenCreated: 20180115131643.0Z

результат мне нужно:

description: Gestion des acces de la CR 902 sur les environnements Big Data en ecriture
distinguishedName: CN=GU_902_A_D5_IC_W,OU=Groupes,OU=CR 902,OU=CAM,DC=LDSCOMPTES
instanceType: 4
whenCreated: 20180115131643.0Z
0
задан 30 January 2018 в 06:06

2 ответа

Исходя из ваших сэмплов, звучит так, как будто вы действительно хотите добавить следующую строку (удаляя дополнительный пробел), если длина текущей строки ровно 78 символов:

$ sed '/.\{78\}/{N;s/\n //;}' file.ldif
description: Gestion des acces de la CR 902 sur les environnements Big Data en ecriture
distinguishedName: CN=GU_902_A_D5_IC_W,OU=Groupes,OU=CR 902,OU=CAM,DC=LDSCOMPTES
instanceType: 4
whenCreated: 20180115131643.0Z

Возможно, менее хрупким подходом может быть адаптация 40. Добавьте строку к предыдущему, если она начинается со знака равенства "=" из объяснения Питера Круминьса «Однострочники», чтобы присоединиться к строке после , когда она начинается с пробела

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

ПРИМЕЧАНИЕ. Если в ваших файлах используются окончания строки CRLF в стиле DOS / Windows, вам нужно заменить \n в вышеприведенных выражениях на \r\n то есть

sed '/.\{78\}/{N;s/\r\n //;}' file.ldif

или

sed -e :a -e '$!N;s/\r\n //;ta' -e 'P;D' file.ldif
3
ответ дан 31 October 2019 в 02:40

Можно использовать awk для этого:

awk '{substr($0,78,78)==""?a="\n":a="";printf "%s"a,$0}'

Эта команда просто проверяет ли 78. символ каждой строки пуст и печатает строку с или без разрыва строки.

От Вашего примера я получаю это было также вставленное изрезывание (кто делает это?!?), для удаления этих ведущих дополнительных пространств изменяют команду к:

awk '{gsub(/^ /,"",$0);substr($0,78,78)==""?a="\n":a="";printf "%s"a,$0}'

Если у Вас есть нежелательные возвраты каретки в файле, удаляют их также:

awk '{gsub(/\r/,"",$0);gsub(/^ /,"",$0);substr($0,78,78)==""?a="\n":a="";printf "%s"a,$0}'

Пример выполняется

$ <test awk '{gsub(/^ /,"",$0);substr($0,78,78)==""?a="\n":a="";printf "%s"a,$0}'
description: Gestion des acces de la CR 902 sur les environnements Big Data en ecriture
distinguishedName: CN=GU_902_A_D5_IC_W,OU=Groupes,OU=CR 902,OU=CAM,DC=LDSCOMPTES
instanceType: 4
whenCreated: 20180115131643.0Z
2
ответ дан 31 October 2019 в 02:40

Другие вопросы по тегам:

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