Вы должны смонтировать (или привязать монтирование )к некоторому каталогу:
mount /dev/mmcblk0p1 /mnt
cd /mnt
tar cjf /otherdisk/archive.tar.bz2 *
Вы также можете отправить результат по ssh (, если он включен в вашей конфигурации busybox )вместо локального сохранения, и, кстати, использовать вычислительную мощность целевого хоста/установленные инструменты для выполнения сжатия:
tar cf - * | ssh user@host "bzip2 | cat > archive.tar.bz2"
Адаптируйте инструмент сжатия, имя архива и т. д. по своему желанию:)
Чтобы добиться указанного выше результата, я просто использовал регулярное выражение для разделителя полей, регулярное выражение для выбора строк и {print $1}
для печати первого столбца.
Я не вижу начальных пробелов или пустых строк в вашем примере, но если вам нужно с ними справиться, посмотрите мои варианты этой команды ниже.
awk -F'[:=]' '!/^[#{]/{print $1}' filename.txt
Результат:
a
b
c
d
e
Если у вас есть пробелы в начале или в конце, может работать следующее. Хотя, признаюсь, не видя примера, мне трудно представить.
awk -F'[:=]' '{gsub(/^\s+|\s+$/,"",$1)} !/^[#{]/{print $1}' filename.txt
Чтобы охватить все возможные случаи, основываясь на ваших комментариях, я адаптировал пример. Теперь у нас есть начальные и конечные пробелы и пустые строки.
a:10
b :20
c:60
# comment
{{# random mustache templating}}
d=4
e =6
Это немного измененная команда для решения этой проблемы.:
awk -F'[:=]' '{gsub(/^\s+|\s+$/,"",$1)} !/^[#{]/ && !/^$/{print $1}' filename.txt
$1
от всего, что идет после :
или=
{print $1}
удаляет все строки, начинающиеся с #
или {
, чтобы исключить комментарии, «шаблоны» и пустые строки.Это дает следующий результат из адаптированного примера:
a
b
c
d
e
Использованиеsed
:
sed -E '{ s/\s*([^:=]*).*/\1/ }; /^(\{\{|#|$)/d' infile
Перетащите порядок приведенных выше команд на sed -E '/.../d; {... }'
, если вы также хотите сохранить те строки, которые не начинаются сразу с символов {{
или #
, а с пробелов.
Разделитель полей может быть полным регулярным выражением, поэтому
awk -F'[:#=]' '!/^{{/ && length($1) > 0 { split($1, a, " "); print a[1] }' filename.txt
достаточно :любой из ‘:’, ‘#’, ‘=’ будет действовать как разделитель. Мы исключаем строки, начинающиеся с «{{», сопоставляем строки, где $1
не является -пустым, разделяем $1
на пробелы и печатаем первое полученное поле.
Возможно, это поможет вам достичь ожидаемого результата
#!/bin/bash
dynamic_array=()
while read -r line
do
var=$(echo "$line" | cut -c 1)
if ! { [ "$var" = '#' ] || [ "$var" = '{' ] || [ "$var" = '}' ]; }
then
dynamic_array+=("$var")
fi
done < A.txt
str_array_value="${dynamic_array[*]}" ; echo "$str_array_value" | tr ' ' '\n' | awk '!seen[$0]++'
Выход:
a
b
c
d
e
Будьте проще:
$ awk 'NF && ($1 !~ /^(#|\{+)/) { sub(/[:=].*/,""); print $1 }' file
a
b
c
d
e