The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
вопрос про удаление символа '\n', !*! httpd, 16-Ноя-11, 23:48  [смотреть все]
привет всем,

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

1.
имеется файл с таким содержимым:
$ cat file
one
two
three
four
five
six

надо чтобы получилось:
$ sed 'xxxxxxxxx' file
one two
three four
five six

те убрать перенос строки во всех нечетных строчках файла.
убрать во всех достаточно просто: sed ':a;N;$!ba;s/\n/ /g' file
а вот как это применить только к нечетным строчкам вопрос!

кто силен в SEDе ? :)
можно тоже самое и на awk/perl/tr  если кто знает буду рад выслушать.

2. при вот таком awk происходит перенос строки после вызова внешней команды system()

$ cat file | awk '{print "this line"; system("myproga "$1); print " values"}'
this line
myprogaresult values

те тут перед результатом команды system() вставляется символ новой строки, как сделать так чтобы перевода строки не было?

  • вопрос про удаление символа '\n', !*! XAnder, 08:48 , 17-Ноя-11 (1)
    > 1.

    perl -ne 's/\n/ / unless $cnt++ % 2; print' file

  • вопрос про удаление символа '\n', !*! Andrey Mitrofanov, 09:56 , 17-Ноя-11 (2)
    > убрать во всех достаточно просто: sed ':a;N;$!ba;s/\n/ /g' file
    > а вот как это применить только к нечетным строчкам вопрос!
    > кто силен в SEDе ? :)

    Деццкииий сааад.

    $ d() { cat << EOT; }
    > one
    > two
    > three
    > four
    > five
    > six
    > $ d

    one
    two
    three
    four
    five
    six
    $ d | sed -n 'N;s/\
    / /p'
    one two
    three four
    five six
    $ _

    > можно тоже самое и на awk/perl/tr  если кто знает буду рад
    > выслушать.

    $ d | awk '{getline s;print $0" "s}'
    one two
    three four
    five six
    $ _

    Одного tr для не хватит, всё равно нужен какой ни то sed, поэтому бессмысленно.

    +bash:

    $ d | while read l && read m; do echo "$l $m"; done
    one two
    three four
    five six
    $ _

    Или лучше (не скажу, почему :-P ) -

    $ d | while read l; do echo -n "$l"; read m && echo -n " $m"; echo; done
    one two
    three four
    five six
    $ _

    > те тут перед результатом команды system() вставляется символ новой строки, как сделать
    > так чтобы перевода строки не было?

    Осспадя.... Ну, printf же, минимум.

    Но man sed, man awk -- по любому до просветления.

    • вопрос про удаление символа '\n', !*! httpd, 12:23 , 17-Ноя-11 (3)
      >[оверквотинг удален]
      > five six
      > $ _
      >> можно тоже самое и на awk/perl/tr  если кто знает буду рад
      >> выслушать.
      > $ d | awk '{getline s;print $0" "s}'
      > one two
      > three four
      > five six
      > $ _
      > Но man sed, man awk -- по любому до просветления.

      О биг сенкс,  но из этих вариантов только с AWK подходит, в SED ты используешь перевод строки, а мне нужен в 1 строчку регэксп.

      кстати ни в манах ни в онлайн учебниках толком не описывается как составлять регэкспы, только типичные примеры, и если нужно что-то экзотическое, то найти проблема. Можешь посоветовать какие нибудь доки где ясно описано как писать регэкспы?

      >> те тут перед результатом команды system() вставляется символ новой строки, как сделать
      >> так чтобы перевода строки не было?
      > Осспадя.... Ну, printf же, минимум.

      погоди, как ты через printf преобразуешь вывод внешней команды? или может результат в переменную записать, а потом форматировать ее вывод?

      • работать надо, заставлять себя, !*! Andrey Mitrofanov, 13:02 , 17-Ноя-11 (4) +1
        > кстати ни в манах ни в онлайн учебниках толком не описывается как
        > составлять регэкспы, только типичные примеры, и если нужно что-то экзотическое, то
        > найти проблема. Можешь посоветовать какие нибудь доки где ясно описано как
        > писать регэкспы?

        Есть два рода людей -- которые умеют, и которые не умеют. Те, что умеют, уже не помнят и не знают, как сами не умели, и как научиться. А те, которые не умеют и _спрашивают, как бы чего-нибудь такого почитать, чтобы вот так вот сразу -- ах! -- и уметь, не умеют учиться.

        Самый древний разговор -- слепого с глухим.

        > погоди, как ты через printf преобразуешь вывод внешней команды?

        За деньги. Или может.

        • работать надо, заставлять себя, !*! httpd, 01:02 , 18-Ноя-11 (5)
          >[оверквотинг удален]
          >> найти проблема. Можешь посоветовать какие нибудь доки где ясно описано как
          >> писать регэкспы?
          > Есть два рода людей -- которые умеют, и которые не умеют. Те,
          > что умеют, уже не помнят и не знают, как сами не
          > умели, и как научиться. А те, которые не умеют и _спрашивают,
          > как бы чего-нибудь такого почитать, чтобы вот так вот сразу --
          > ах! -- и уметь, не умеют учиться.
          > Самый древний разговор -- слепого с глухим.
          >> погоди, как ты через printf преобразуешь вывод внешней команды?
          > За деньги. Или может.

          понятно, спасибо и на том.




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

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