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

У меня были хорошие события с помощью rdiff-резервного-копирования приблизительно в 2005. Разработка с 2009 не ни до чего, но это может просто быть то, потому что проект теперь довольно стабилен: это было в разработке с 2002. Все еще, кажется, существует действие по списку рассылки, все же. Это использует тот же базовый алгоритм в качестве rsync. В то время как это не так необычно и полнофункционально как некоторые другие решения для резервного копирования, это имеет преимущество того, чтобы быть довольно гибким и настраиваемым, и основная функциональность довольно проста.

4
05.08.2014, 13:52
2 ответа
busybox seq -s'
word ' 4000 | 
sed '/000/w /dev/fd/2' |  
wc -l

OUTPUT

word 1000
word 2000
word 3000
word 4000
4000

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

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

busybox seq -s'
word ' $MAX_INCREMENT >$TO_FILE
1
27.01.2020, 20:52

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

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

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


Поскольку кажется, что в вашей строке есть литерал "\ n" , от которого вы хотите избавиться, вы также можете использовать замену строки во время подстановки параметров. Этот можно настроить вне Busybox ash , и в этом случае вам придется перейти на 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} , где шаблон является глобальным, если он начинается с / . Похоже, в вашем ash многое настроено, так что этого может вообще не быть. В этом случае вам, вероятно, придется использовать sed , хотя я полагаю, что разумное использование IFS и read позволит вам обойти это и восстановить правильная строка.

5
27.01.2020, 20:52

Теги

Похожие вопросы