LINUX.ORG.RU

bash, sed, newlines...


0

0

Пишу скрипт, он делает

text=`cat sample.html | grep 'Что ищем'` - причем grep выводит несколько строк.

А потом нужно вывести содержимое переменной $text, но так, чтобы (внимание!) сохранились переносы строки. Если же делать просто echo $all_text, то все выводится одной строкой.

Пробовал так:

text=`cat sample.html | grep 'Что ищем' | sed s/\\\\\<newline\\>/NEWLINE_MAGIC_COOKIE/g`

И потом при выводе делать обратную замену.

Не получается... Не могу понять как нужно матчить новую строку в sed. \n не срабатывает, наверное из-за того, что я не могу в экранировке разобраться, шел съедает символы...

anonymous

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

anonymous
()

echo "$all_text"

кстати в zsh даже без кавычек выводются переносы...

CrazyPit ★★★
()
Ответ на: комментарий от anonymous

Если разобрать нужно, то

cat sample.html | grep 'Что ищем'|while read name;do ....; done

blacktiger
()

eval `ps -e | grep getty | awk '{a[i++]=$0} END {print "text=(" ; for (v in a) {print "\""a[v]"\""}; print ")"}'|tr '\n' ' '`

---------------------------------------------------------------
$ ps -e|grep getty
 1033 tty2     00:00:00 getty
 1034 tty3     00:00:00 getty
 1035 tty4     00:00:00 getty
 1036 tty5     00:00:00 getty
 1037 tty6     00:00:00 getty

$ unset text
$ eval `ps -e | grep getty | awk '{a[i++]=$0} END {print "text=(" ; for (v in a) {print "\""a[v]"\""}; print ")"}'|tr '\n' ' '`
$ echo "${text[0]"
 1034 tty2 00:00:00 getty
$ echo "${text[1]}"
 1035 tty3 00:00:00 getty

$echo "${text[4]}"
 1037 tty6 00:00:00 getty

sdio ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.