EDIT:
Вероятно, мой любимый метод в настоящее время - использовать специальный символ вместо '\ n'. Правила цитирования становятся такой головной болью, когда вы передаете строку. Но если вы упакуете свою строку, скажем, |
вместо \n
и _
вместо
, тогда у вас будет действительно переносимое представление, которое вы можете передать функциям и т. Д.
Вот пример:
whatAmI=$( printf "Wow oh wow\nYou are good\n"| \
sed -e 's#\(You are \)\(good\)#\1\2|\1the best#g' | \
tr '\n' '|' | tr ' ' '_' )
Результат:
Wow_oh_wow | You_are_good | You_are_the_best |
Чтобы "распаковать" вашу сжатую строку, просто пропустите ее через тот же tr
, но с обратным порядком.
1025 * т.е. *
echo "$whatAmI" | tr '|' '\n' | tr '_' ' '
Результат
Ух ты, вау
Вы хороши
Ты лучший
В дополнение к вышеприведенным стратегиям (используя appen - /a
и ограничивая \\\n
) вы также можете сделать это:
sed -i 's/You are good/You are good'"\n"' You are the best/g' /output.txt
В каком-то смысле я предпочитаю решение Гленна Джекмана, так как оно более справедливо для намерения.
Но я считаю эту стратегию полезной, поскольку вы также можете использовать ее для передачи переменных в скриптах bash. Если вы не собираетесь использовать переменную более одного раза, это будет чище, чем -v
, например,
whatYouAre="okay"
sed -i 's/You are good/You are good'"\n"' You are '"${whatYouAre}"'/g' /output.txt
(Примечание: одинарные кавычки также работают для \n
, но не для передачи в переменные, так как это требует интерпретации.)