The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Объединение строк bash, !*! AnnaBokova, 31-Авг-12, 17:18  [смотреть все]
Доброго времени суток!

Есть текстовый файл вида:

+ 123
456
789 -
+ 234
567
890 -

Нужно объединить все строки между + и -, и получить в результате:
+ 123 456 789 -
+ 234 567 890 -

Как это можно сделать? начала изучать sed, но что-то не могу никак тут его применить.


  • Объединение строк bash, !*! XAnder, 19:35 , 31-Авг-12 (1) –1
    > Как это можно сделать? начала изучать sed, но что-то не могу никак
    > тут его применить.

    sed принципиален? Если нет, то всё просто, но нудно:

    $ cat file.txt | perl -ne 'chomp; if(/^\+/) {$s=$_} elsif(/-$/) {print "$s $_\n"; $s=""} elsif($s) {$s.=" $_"} else {print "$_\n"}'

    • Объединение строк bash, !*! ДорогойДрук, 00:28 , 01-Сен-12 (2) +2
      >> Как это можно сделать? начала изучать sed, но что-то не могу никак
      >> тут его применить.
      > sed принципиален? Если нет, то всё просто, но нудно:
      >
      $ cat file.txt | perl -ne 'chomp; if(/^\+/) {$s=$_} elsif(/-$/) {print "$s 
      > $_\n"; $s=""} elsif($s) {$s.=" $_"} else {print "$_\n"}'

      ООО да, пёрл здесь очень кстати :)

      cat file.txt | tr -d "\n" | sed s/-/-"\n"/g
      Вам не кажется, что так будет несколько проще?

    • Объединение строк bash, !*! anonymous, 13:53 , 01-Сен-12 (3)
      >> Как это можно сделать? начала изучать sed, но что-то не могу никак
      >> тут его применить.
      > sed принципиален? Если нет, то всё просто, но нудно:
      >
      $ cat file.txt | perl -ne 'chomp; if(/^\+/) {$s=$_} elsif(/-$/) {print "$s 
      > $_\n"; $s=""} elsif($s) {$s.=" $_"} else {print "$_\n"}'

      Perl принципиален? Если нет, то:


      #!/usr/bin/expect --
      log_user 0
      spawn bash
      set outfile {}
      expect "\\$" {exp_send -- "cat file.txt\n"}
      expect {
          "\\$" {}
          -re "\n(\\+.*-)+?" {lappend outfile $expect_out(1,string); exp_continue}
      }
      set outfile [string map {\r "" \n " "} $outfile]
      foreach list $outfile {puts stdout $list}

  • Объединение строк bash, !*! allez, 15:53 , 01-Сен-12 (4) +2

    $ cat file
    + 123
    456
    789 -
    + 234
    567
    890 -

    $ cat file | tr "\n" " " | sed 's/- /-\n/g'
    + 123 456 789 -
    + 234 567 890 -

  • Объединение строк bash, !*! михалыч, 19:04 , 01-Сен-12 (5) +1
    чисто "чистый" sed ))
    sed -e :a -e '/[0-9]$/N; s/\n/ /; ta' file

  • Объединение строк bash, !*! Anonim, 22:26 , 11-Окт-12 (12)
    > Как это можно сделать? начала изучать sed, но что-то не могу никак
    > тут его применить.

    Признайся, ты - бородатый админ, ради лулзов прикидывающийся лицом женского пола :)




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру