Почти 2 года спустя, но... кажется, что uuencode или почта не работают в Linux. Или, может быть, он работает правильно, но Outlook не работает. Кто знает?
uuencode a.gz a.gz | mail -s "тестирование uuencode из linux" me@domain.com
uuencode a.gz a.gz | mail -s "тестирование uuencode from aix" me@domain.com
При отправке из Linux Outlook показывает встроенный код uuencode. Отправка из AIX отображается в Outlook как вложение. Та же команда, тот же почтовый ретранслятор, другая ОС, разные результаты. О, может быть, это sendmail (aix )vs postfix (linux )? В любом случае, делайте выводы о месте поломки сами.
О, чтобы дать реальный ответ... mailx -a.gz -s "subject" me@domain.com
вы можете обойти это:sed "s@\^@\'\^@;s/$/\'/"
$ cat > toto
#multiline.pattern: ^\[
$ sed "s@\^@\'\^@;s/$/\'/" toto
#multiline.pattern: '^\['
Идея состоит в том, чтобы заменить ^
на '^
, а затем конец строки на '
с концом строки в двух последовательных действиях, чтобы упростить регулярное выражение.
конечно с sed -i...
он изменяет файл
Учитывая ваш пример, что-то вроде этого должно работать:
$ cat ex
#multiline.pattern: ^\[
$ sed -e "s/^#multiline\.pattern:.*/multiline.pattern: '^\\\['/" ex
multiline.pattern: '^\['
Это заменяет строку, начинающуюся с #multiline.pattern:
, за которой следует любое количество символов до конца строки, на шаблон, который вам нужен.
Шаблон, который вы ищете, включает в себя некоторые специальные символы (\
, [
), которые я экранировал дополнительным \
(, например, \\
дает вам литерал \
, \[
дает вам буквальный[
).
Что-то не так, так это то, как цитируется последняя часть :
sed 's/multiline.pattern: \^\\\[/multiline.pattern: '\'\^\\\\[\'/g'
# ^ ^ ^ ?
Эта последняя часть backslash
экранирована до конца, где открывается еще одна одинарная кавычка . Вот почему bash
дал подсказку $PS2
>
, позволяя вам вводить больше информации, пока цитата не будет закрыта другой'
Удалите последний '
и все заработает:
sed 's/multiline.pattern: \^\\\[/multiline.pattern: '\'\^\\\\[\'/g
# or:
sed 's/multiline.pattern: ^\\\[/multiline.pattern: '"'^\\\['/g"
sed "s/multiline.pattern: ^\\\\\[/multiline.pattern: '^\\\['/g"
sed 's/multiline.pattern: ^\\\[/multiline.pattern: \x27^\\[\x27/g'
Также:
#
. Для этого включите его в шаблон соответствия для sed
(, используя любой стиль цитирования, который вы предпочитаете ):sed 's/#multiline...'
sed -r 's/#(multiline\.pattern: )(\^\\\[)/\1'\'\\2\'/g
(использование -r
/ --regexp-extended
для этого не обязательно, но это более читабельно)
sed
работает должным образом, сначала запустив ее без опции -i
/ --in-place
, чтобы можно было проверить вывод на наличие ошибок, вместо того, чтобы перезаписывать файл потенциальными ошибками.