LINUX.ORG.RU

Запись вывода утилит в переменную как есть

 , , , ,


0

2

Всем привет, возможно вопрос глупый, так что прошу прощения,но…

Делаю так VAR=$(some_util | grep "some_expr") -> вывод пара строк с нужными вхождениями Если вывод идет STOUT на консоль, то строк несколько и имеется перенос строки. Если записать в переменную, то в ней оказывается всё в одной строке, без символов переноса. Вопрос как сделать так что бы символы переноса сохранялись. Что бы потом с помощью awk построчно пройтись. Спасибо


Он и записывается как есть

Переводы строк портятся когда ты пишешь echo $VAR

Как написали выше, кавычек будет достаточно

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

test=$(ls -l /backup/ | grep 22.12)

$test | awk '{print NR, $0}' # Не катит drwxr-xr-x: command not found

echo $test | awk '{print NR, $0}' #Тоже не прошло

1 drwxr-xr-x 5 root root 4096 дек 7 08:02 2022.12.07-08.02.30 drwxr-xr-x 5 root root 4096 дек 7 08:28 2022.12.07-08.28.11

Stazot
() автор топика
Ответ на: комментарий от Stazot

У меня прошло.

Начать я бы советовал из нетленки старины Реймонда — http://rus-linux.net/lib.php?name=/MyLDP/histori/smart-questions-ru.html
Никто же не знает что значит «не прошло». Может у тебя свет выключили и команда не успела завершиться. Всегда показывай вывод команды, весь диалог в консоли, а не какие-то обрывки с размытым «не работает».

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

В кавычки взять переменную уже советовали?

#!/bin/sh
VAR=$(some_util | grep "some_expr")
echo "$VAR"
#!/bin/sh
test=$(ls -l /backup/ | grep 22.12)
echo "$test" | awk '{print NR, $0}'
Clockwork ★★★★★
()
Ответ на: комментарий от Stazot

Заодно добавлю, что вместо ls -l /backup/ | grep 22.12 правильнее и эффективнее будет ls -l /backup/*22.12*. Это помимо того, что уже сказали.

emorozov
()
Ответ на: комментарий от Clockwork

Я, просто, к тому, что я пробую его команды и у меня все работает и сам не мог понять, что ему не нравится.

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

Спасибо, Советовали выше, но не сразу понял о чем речь. Да так заработало.

Stazot
() автор топика
Ответ на: комментарий от emorozov

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

Stazot
() автор топика
Ответ на: комментарий от urxvt

Еще маленький вопрос, можно ли у AWK сразу взять вхождение или надо считать где оно лежит? То есть $0|$1|$2….$n. Может уже сделали что то пригодное.

Stazot
() автор топика
Ответ на: комментарий от Stazot

man awk, я серьезно, он не такой большой, чтобы не прочитать его весь, будешь примерно представлять какая функциональность у него.

А в целом, советую еще вот эту книгу полистать:

http://libgen.rs/book/index.php?md5=158E631C46399A4F961C3B87CB7E6AB6

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

Не понял, что ты имеешь ввиду. Можешь пример привести?

А что ты вообще хочешь достичь в оригинальной задаче?

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

В бэше ещё echo не интерпретирует escape-последовательности без -e

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

правильнее и эффективнее

Только результат другой. 22e12 в первом случае выведется, а во втором — нет.

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

Очевидно

Не знаю, не знаю, в его голову не заглядывал. И вообще, может у него TIME_STYLE=+%d.%m.%Y и он хочет по дате 22 декабря отобрать.

monk ★★★★★
()

Еще один вариант - обратные одинарные кавычки.

#!/bin/sh

VAR=`ls -1 | grep gz`
echo "$VAR"
bugs-bunny
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.