Запишите переменную, содержащую большой текст, с \ n в файл с обычными интерпретаторами интерпретаторов. Как ты делаешь это?

Окружающая среда: оболочка linux или лучше, зольная оболочка в busybox (пример системы: Openwrt).

Учитывая строковую переменную с большим текстом "${a}" построенным таким образом:

 for index in $(seq 1 40000); do #it is 40000 for a reason, it helps if you want to reproduce the error on your system. a="${a}""\n""word ${index}" done 

и учитывая тот факт, что попытка использовать эту переменную в качестве аргумента для общей команды вызывает ошибку, например:

 echo "${a}" #fails awk -v VAR_A="${a}" '<program>' #fails 

(сбои должны быть: http://www.in-ulm.de/~mascheck/various/argmax/ )

Как вы пишете такую ​​переменную в текстовый файл, возможно, используя только простые команды, а не sed / awk / perl / другой мощный интерпретатор.

В идеале текстовый файл должен выглядеть так:

 word 1 word 2 word 3 ... 

и не нравится:

 word 1\nword 2\nword 3\n... 

Update1: Кто-то спрашивает: «Почему вы не можете изменить скрипт, производящий переменную $a ?». Потому что я не могу из-за, скажем, отсутствия авторизации (« скрипт работал до сегодняшнего дня, поэтому вы можете исправить только часть печати »). Таким образом, дается $a и его формат, я могу найти способ распечатать его в файле.

Обновление2: использование предложенных «здесь документов» разрешает большинство проблем, но все же у меня есть содержание, напечатанное в одной строке. Может быть, мой конфиг?

2 Solutions collect form web for “Запишите переменную, содержащую большой текст, с \ n в файл с обычными интерпретаторами интерпретаторов. Как ты делаешь это?”

Вы можете сделать здесь документ и использовать cat :

 $ cat <<EOT >output $a EOT $ wc -l output 40000 

Я не знаю точно, насколько эффективна ваша зоба Busybox (она настраивается), но это должно работать где угодно, даже без встроенных функций. Он расширяет значение переменной в квази-файл, который затем присваивается cat , а не помещает значение в командную строку.


Поскольку у вас, кажется, есть буквальный "\n" в вашей строке, от которой вы хотите избавиться, вы также можете использовать замену строк во время подстановки параметров. Это можно настроить из ash Busybox, и в этом случае вам придется перейти к sed . Если у вас есть это расширение (не-POSIX), вы можете использовать ${var//\\\n/$NEWLINE} :

 $ busybox ash $ foo="x\ny\nz" $ echo "$foo" x\ny\nz $ NEWLINE=" " $ echo "${foo//\\\n/$NEWLINE}" x y z 

Это тот же синтаксис, что и Bash ; ${var/pattern/replacement} , где pattern является глобальным, если он начинается с / . Кажется, ваш ash имеет много настроек из этого, так что это может быть совсем не так. В этом случае вам, вероятно, придется пойти с sed , хотя, думаю, разумное использование IFS и read позволят вам обойти это и восстановить правильную строку.

 busybox seq -s' word ' 4000 | sed '/000/w /dev/fd/2' | wc -l 

ВЫВОД

 word 1000 word 2000 word 3000 word 4000 4000 

Вы должны просто использовать встроенную busybox и указать word в качестве разделителя. Затем вы можете >redirect его в файл, если хотите. В приведенном выше примере я разделился на sed чтобы вы могли получить представление о выходе без необходимости смотреть на 4000 строк, но все они были напечатаны. Если ваш busybox не поддерживает это, обновите .

Таким образом, в основном все, что вам нужно для всего этого:

 busybox seq -s' word ' $MAX_INCREMENT >$TO_FILE 
  • Объединить 2 файла на основе всех доступных значений первого столбца в обоих файлах
  • Рекурсивная очистка всех папок и подпапок в папке, в которой нет файлов
  • Как определить количество подкаталогов и файлов из команды ls -ld?
  • Команда для работы со всеми файлами в папке и вывода результата в один файл
  • Путь к файлу в журнале аудита вместо номера inode
  • Какие отношения связаны с маскировкой ACL и стандартным групповым разрешением на файл?
  • Удалить все файлы без ключевого слова в имени файла
  • Как перечислить файлы блокировки процессов?
  • идентифицировать недостающие файлы в папке
  • Есть ли способ отслеживать, что удаляет исполняемый флаг из файла?
  • массовые распаковки файлов gzip без расширения gz
  • Interesting Posts

    Каков самый быстрый способ поиска дублированных файлов?

    Размер буфера для захвата пакетов в пространстве ядра?

    Являются ли исходные IP-адреса включенными в уникальность уникального порта Linux?

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

    Перезапустить сервер MySQL

    Как установить PATH для R, установленного в моем каталоге

    раскомментирование определенного кода в большем файле

    сбой в gnome-shell

    Принуждение Linux-сервера NFS к повторному подключению к серверу после отключения NFS

    Проблема с командой promp cycling при использовании цветов и попытке поместить ветви git в командную строку

    «Wget -restrict-file-names = windows», похоже, не удалось преобразовать ссылки для NTFS

    Разрешение 2560×1440 по HDMI с ноутбуком с NVIDIA Optimus и Ubuntu 15.10

    Разрешения на разрешение файлов из той же группы

    Управление вентилятором на Lenovo Thinkpad Edge S430 и Ubuntu 13.04

    Завершить ввод текста в GPG

    Linux и Unix - лучшая ОС в мире.