привет всем,у меня пара задачек которые поставили меня в тупик, вроде простой регэксп нужен, но чет устал уже гуглить.
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() вставляется символ новой строки, как сделать так чтобы перевода строки не было?
> 1.
perl -ne 's/\n/ / unless $cnt++ % 2; print' file
> убрать во всех достаточно просто: sed ':a;N;$!ba;s/\n/ /g' file
> а вот как это применить только к нечетным строчкам вопрос!
> кто силен в SEDе ? :)Деццкииий сааад.
$ d() { cat << EOT; }
> one
> two
> three
> four
> five
> six
> $ done
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 -- по любому до просветления.
>[оверквотинг удален]
> 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 преобразуешь вывод внешней команды? или может результат в переменную записать, а потом форматировать ее вывод?
> кстати ни в манах ни в онлайн учебниках толком не описывается как
> составлять регэкспы, только типичные примеры, и если нужно что-то экзотическое, то
> найти проблема. Можешь посоветовать какие нибудь доки где ясно описано как
> писать регэкспы?Есть два рода людей -- которые умеют, и которые не умеют. Те, что умеют, уже не помнят и не знают, как сами не умели, и как научиться. А те, которые не умеют и _спрашивают, как бы чего-нибудь такого почитать, чтобы вот так вот сразу -- ах! -- и уметь, не умеют учиться.
Самый древний разговор -- слепого с глухим.
> погоди, как ты через printf преобразуешь вывод внешней команды?
За деньги. Или может.
>[оверквотинг удален]
>> найти проблема. Можешь посоветовать какие нибудь доки где ясно описано как
>> писать регэкспы?
> Есть два рода людей -- которые умеют, и которые не умеют. Те,
> что умеют, уже не помнят и не знают, как сами не
> умели, и как научиться. А те, которые не умеют и _спрашивают,
> как бы чего-нибудь такого почитать, чтобы вот так вот сразу --
> ах! -- и уметь, не умеют учиться.
> Самый древний разговор -- слепого с глухим.
>> погоди, как ты через printf преобразуешь вывод внешней команды?
> За деньги. Или может.понятно, спасибо и на том.