Объединить строки в одну

наиболее общий способ сделать это:

hwclock --systohc --localtime

, который сохраняется при перезагрузках и работает в большинстве систем.

7
28.07.2016, 07:15
4 ответа

Вот вы:

Для (GNU sed) :

sed -e ':x' -e 'N' -e '$!bx' -e 's/\n/ /g' -e 's/ </\n</g' yourFile

Для (BSD sed) :

sed -e ':x' -e 'N' -e '$!bx' -e 's/\n/ /g' -e 's/ \</\'$'\n</g' yourFile 

Вот как я это сделал:

  • Создайте метку через : x
  • Добавить строки в пространство шаблонов с помощью N
  • Переход к созданной метке - x в первой части команды - $! Bx , поэтому он не будет применять связанную с пробелом подстановку в последней строке, так как мы должны сохранить последнюю новую строку
  • Затем подстановка заменяет каждую новую строку пробелом () в пространстве шаблонов
  • И затем другая подстановка заменяет каждый <, за которым следует пробел с новой строкой, за которым следует <.
3
27.01.2020, 20:16

Использование awk , paste и sed

awk '/</{a=1}/>/{print;a=0}a' file | paste -d "" -s | sed 's/></>\n</g'
1
27.01.2020, 20:16

С awk

awk 'BEGIN{RS=">\n+";ORS=">\n";FS="\n"} {$1=$1}1' yourfile
< Jan 20, 2016 11:58:09 AM EST  Test1 Sample Test1 >
< Jan 20, 2016 11:58:09 AM EST Sample Test It is not  T1 T2 >

Если вам нужна пустая строка между каждым выводом, вы можете добавить дополнительный \ n в ORS то есть

awk 'BEGIN{RS=">\n+";ORS=">\n\n";FS="\n"} {$1=$1}1' yourfile

(хотя это может также добавить завершающую пустую строку в конце файла).

6
27.01.2020, 20:16

Похоже, по сути, вы хотите удалить все символы новой строки, кроме тех, которые следуют за >, так что:

perl -pe 's/(?<!>)\n//'

получится. (? - это отрицательный оператор look behind. Таким образом, это \n, если ему не предшествует >.

Если нужно удалить все символы новой строки, которые находятся между совпадающими <...> парами и, как в вашем новом примере, которые могут быть вложены, то это становится сложнее:

perl -0777 -pe 's{<(?:(?0)|[^<>])*>}{$& =~ s/\n//gr}gse'

Здесь используется рекурсия в perl regexps ((?0) снова относится ко всему regexp).

3
27.01.2020, 20:16

Теги

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