Добавление строки, содержащей символ ESC с sed

Если Вы плохо знакомы с подобной UNIX ОС, то необходимо рассмотреть решение для виртуализации, как David Mackintosh предполагает. Почему? Ну, можно использовать это для изучения пользы и плохого об ОС. Можно сделать ошибки и повреждать VM так часто, как Вы хотите, не влияя на машину Windows хоста; этот тип практики важен, поскольку это дает Вам практический опыт, в котором Вы нуждались бы для использования ОС для реальной работы. Для первого образовательного примера установите основную ОС в VM затем в корневом каталоге, может работать, рекурсивная сила удалите:

CD /

комната sudo - франк /

Почему делают это? Когда Вы сделали это однажды, и Вы видите, какой эффект это имеет, Вы поймете, почему Вы никогда не хотели бы делать это снова. Конечно, это - просто простой, но иллюстративный пример. Будьте готовы удалить VM и переустановить после этого.

Который ОС? Для системы GNU/Linux я обычно рекомендую Debian, потому что это стабильно, и установщик прост для использования. При использовании Fedora Вы могли бы выбрать это для его знакомства. Эти системы имеют многих пользователей настолько находящая справка, когда у Вас есть проблема, будет легко.

Что дальше? Разработайте то, что Вы хотите изучить или испытать. Командная строка является хорошей начальной точкой, для понимания основ того, что они предлагают и где найти различные части ОС. Установка графического интерфейса не важна, но означает, что Вы уже будете знакомы с моделью взаимодействия. Не волнуйтесь о производительности на данном этапе, Вы все еще учитесь, и это должно иметь приоритет. Вот некоторые предложения для тем, чтобы исследовать и осуществить на Вашей новой ОС.

1
10.08.2012, 14:13
4 ответа

Команда sed a\ интерпретирует Escape, таким образом, необходимо копировать обратные косые черты в строке, Вы интерполируете. Попробуйте это:

sed -e "5a\\
$(echo -E "$text" | sed -e 's/\\/\\\\/g')"
3
27.01.2020, 23:17
  • 1
    Спасибо. Я должен буду, вероятно, добавить выход $ также. Сколько другие специальные символы, которые требуют выхода, возможны для строки удара? –  pmr 10.08.2012, 15:04
  • 2
    Нет, оболочка не делает рекурсивной интерполяции. Если Вы имеете a='AA' и b='this is $a', затем echo $b просто распечатает this is $a. После того как Вы делаете echo произведите корректную строку, только необходимо волноваться о sed, и sed только интерпретирует обратные косые черты, который заботится о с внутренним sed.Это все. –  angus 10.08.2012, 16:03

Заключение в кавычки хитро. Я рекомендую использовать инструмент, который не требует, чтобы Вы добавили дополнительные кавычки, такие как awk или жемчуг. Эти два инструмента позволяют Вам передавать параметры командной строке или через среду и использовать их в текстовых манипуляциях. С Perl:

export text
perl -i -pe '$_ .= "$ENV{text}\n" if $. == 5' "$filename"

С awk необходимо сделать файл, перемещающийся вручную:

tmp=$(TMPDIR=$(dirname -- "$filename") mktemp)
awk -v text="$text" '{print} NR==5 {print text}' <"$filename" >"$tmp" &&
mv -- "$tmp" "$filename"
2
27.01.2020, 23:17

Можно обычно применять выход с printf "%q", попробуйте это:

text='\epsilon'
echo -e "$text"
silon

с %q:

text=$(printf "%q" '\epsilon')
echo -e "$text"
\epsilon
1
27.01.2020, 23:17
  • 1
    Также очень хорошее решение, хотя я пошел с sed путем. –  pmr 10.08.2012, 16:22

Поскольку я не sed ведущее устройство, я нахожу легче объяснить с эхом.

Используйте одинарные кавычки вместо двойных кавычек.

example1:

echo "one\\two"
one\two

example2:

echo 'one\two'
one\two

Так, при помощи example2 пути Вы ни из чего не должны выходить. Строка в одинарных кавычках 's\t\r\i\n\g' интерпретируется как есть (\, символ не работает символом ESC),

источник: один

-1
27.01.2020, 23:17
  • 1
    Это бесполезно. Поскольку Вы видите, что я должен развернуть переменную. Этого не произошло бы, если бы я должен был использовать Escape одинарной кавычки. –  pmr 10.08.2012, 15:03

Теги

Похожие вопросы