sudo tee -a /etc/ansible/hosts <myfile.txt >/dev/null
Или, если вы хотите использоватьcat
:
cat myfile.txt | sudo tee -a /etc/ansible/hosts >/dev/null
Любой из них должен работать. Непонятно, как вы «добавили» /dev/null
при попытке, но это перенаправляет стандартный вывод tee
на /dev/null
.
На самом деле вы привели плохой пример с \
и поместили ^
вне кавычек.
Поведение кавычек (или их отсутствие )определяется оболочкой, которую вы используете (Я предполагаю bash
), а не grep
. По общему правилу:
" double quotes Shell variables between the quotes are expanded
' single quote Shell variables do not get expanded
no quotes you can only use a single word, unless you escape the spaces.
Итак, имейте в виду, что оболочка сначала делает некоторую интерпретацию, а затем передает аргументы в grep
.
Теперь несколько примеров:
cat >afile <<EOF
a
aa
aaa
EOF
cat > abfile <<EOF
a
b
ab
aba
EOF
avar=a
Мы создаем два файла afile
и abfile
и переменную оболочки avar
.
grep 'a' afile
даст:
a
aa
aaa
grep "a" afile
даст:
a
aa
aaa
(то же ). grep "$avar" afile
расширит переменную avar
до a
, поэтому результат будет
a
aa
aaa
Однако grep '$avar' afile
не расширяет переменную avar
, и поэтому результатом является:
(пустой)
Абфайл создан для примера без кавычек. Теперь вы должны понять, почему:
avar='a abfile'
grep $avar
дает:
a
ab
aba
Конечно, если вы хотите найти одинарные кавычки, вы должны grep "'"
и наоборот -.
Любое «слово» оболочки, состоящее из строк в кавычках, соединенных вместе, по-прежнему является одним аргументом. Таким образом, вы можете составлять аргументы из частей с разными правилами.
Paul--) Q='One Two'
Paul--) J=A'${Q}'B"${Q}"C
Paul--) echo ::"${J}"::
::A${Q}BOne TwoC::
Paul--) echo ::${J}{Foo,Bar}::
::A${Q}BOne TwoCFoo:: ::A${Q}BOne TwoCBar::
Paul--) echo ::"${J}{Foo,Bar}"::
::A${Q}BOne TwoC{Foo,Bar}::