grep -a
может работать:
из man grep:
-a, --text equivalent to --binary-files=text
напр.grep -a -n "demodulator_process" 2018_12_22_13_04_adfags-modem.log
В качестве альтернативы вы можете удалить нулевые символы перед поиском, чтобы файл не рассматривался как двоичный файл. (Это не изменит файл, а только изменит содержимое для поиска ).
cat 2018_12_22_13_04_adfags-modem.log | tr -d '\000' | grep "demodulator_process"
Do I have to move the Arch partition
Да, размер раздела нельзя изменить влево, поэтому вам нужно переместить его в начало свободного места, а затем изменить его размер. GParted может это сделать, используйте опцию Раздел → Изменить размер/переместить . Эту операцию нельзя выполнить на смонтированной файловой системе, вам нужно использовать LiveCD. Это займет некоторое время, потому что все данные в разделе необходимо переместить, но в остальном это не сложная задача с GParted. Как всегда при работе с хранилищем, рекомендуется делать резервную копию ваших данных.
-121 ---256463 -Переменные окружения представляют собой простые пары значений ключей -строк. Массив не может быть переменной окружения.
Однако вы можете передать значения вашего массива a
в скрипт bash -c
:
bash -c 'printf "%s\n" "$@"' bash "${a[@]}"
или, если вы хотите вызвать массив b
в скрипте:
bash -c 'b=( "$@" ); printf "%s\n" "${b[@]}"' bash "${a[@]}"
В обоих этих случаях элементы массива a
передаются в командной строке скрипта. Это означает, что они будут отображаться в"$@"
(в "$1"
, "$2"
и т. д. )внутри вашего скрипта bash -c
.
В вашем вопросе происходит то, что команда
a=('Apple Tomato' 'Banana Carrot') bash -c '...'
устанавливает переменную a
в строку (Apple Tomato Banana Carrot)
. Это значение переменной окружения a
в скрипте bash -c
:
$ a=('Apple Tomato' 'Banana Carrot') bash -c 'printf "%s\n" "$a"'
(Apple Tomato Banana Carrot)
Если вам действительно нужно передать данные как переменную окружения, вы можете сделать это, выбрав разделитель и затем объединив массив в одну строку.
Например, используя:
IFS=:
b="${a[*]}" bash -c 'set -f; IFS=:; a=( $b ); printf "%s\n" "${a[@]}"'
При этом создается строка Apple Tomato:Banana Carrot
и создается переменная среды b
с этой строкой в качестве значения для сценария bash -c
.
Затем этот сценарий снова разделяет b
на :
и присваивает разделенные слова своему собственному массиву a
.
Мне нужно использовать set -f
в скрипте, чтобы избежать вызова подстановки имени файла в разделенных словах при использовании $b
без кавычек.
Затем вы также захотите восстановить исходное значение IFS
как в bash -c
, так и в родительской оболочке (вы можете сохранить старое значение в переменной, чтобы упростить эту задачу ). Вы также можете снова включить подстановку имен файлов в скрипте bash -c
с помощью set +f
.
ifs=$IFS; IFS=:
b="${a[*]}" bash -c 'set -f; ifs=$IFS; IFS=:; a=( $b ); IFS=$ifs; unset ifs; set +f; printf "%s\n" "${a[@]}"'
IFS=$ifs; unset ifs