Пара вопросов:
]
указывает на конец аргументов для [
(test
), и это должен быть последний аргумент; у вас есть пара ]
s, что неправильно; предположительно вы хотели использовать:
if [ $( file -b $i ) == "directory" ]
Если бы вы использовали вышеприведенное, то получили бы bash: [: слишком много аргументов
], потому что разделение слов было бы сделано на выходе расширения переменной ($i
), а затем подстановка команды, $()
(команда file
) и [
увидит несколько слов перед =
, что приведет к сообщению об ошибке. Вам необходимо заключить в кавычки расширение переменной и подстановку команд:
[ "$(file -b "$1")" == "directory" ]
В качестве примечания, вы должны использовать ключевое слово bash
[[
], а не [
, поскольку первое будет обрабатывать разделение слов (и расширение имени пути) за вас.
Я использовал комбинацию grep и sed для достижения вашей цели после \ n (и до) \ n
grep -o '\\n(.*)\\n' test.txt|sed -e 's/\\n//g'
Пример вывода
(T.a = 1)
(public.cde.newcol = \'013\')
Вы можете сделать это с помощью sed
следующим образом:
sed -e 's,\\n(.*,,' unset
или с помощью awk
, вам нужно сделать много убегающих
awk -F'\\\\n\\(' '{print $1}' unset
, чтобы получить право побега как для \
до n
, так и для защиты от специальной интерпретации (