Добавление макроса TEX к началу файла с помощью sed (почему мой метод не работает?)

Это должно работать:

tar zcf calendar.tgz "a calendar_final" --exclude '.*'
4
13.04.2017, 15:36
4 ответа

У меня нет доступа к sed прямо сейчас, таким образом, я не совсем уверен, что это корректно, но я думаю, что просто необходимо удалить первую обратную косую черту и пространство после нее.

sed -i '1i\\\def\\\submit{}' 'dirname/filename'

Попробуйте его и посмотрите, работает ли это.

4
27.01.2020, 20:48

sed для редактирования потоков - файл не является потоком. Используйте программу, которая предназначена с этой целью, какed или ex. -i опция к sed не является только не портативным, это также повредит любые символьные ссылки на Ваш файл, так как это по существу удаляет его и воссоздает его, который бессмыслен.

ed -s [file] << EOF
0a
\\def\\submit{}
.
w
EOF
5
27.01.2020, 20:48
  • 1
    , что Вы имеете в виду жесткие ссылки, не символьные ссылки –  Michael Mrozek♦ 21.09.2011, 23:40
  • 2
    @Michael - я не делаю. Попытайтесь создать файл, затем создав символьную ссылку на тот файл, затем передав символьную ссылку как файл для sed -i воздействовать на. –  Chris Down 21.09.2011, 23:49
  • 3
    @ChrisDown Просто видел это снова. Вы действительно корректны о -i удаление символьных ссылок, хотя GNU sed обеспечивает --follow-symlinks опция для того случая. Конечно, все это представляется спорное более важным моментом это sed -i является непортативным и должен избежаться так или иначе. –  jw013 22.03.2012, 18:03

Я смог получить рабочую версию этого при помощи ответа на: "Как я могу предварительно ожидать тег к началу нескольких файлов?".

Я ранее не знал об этом вопросе. Решение:

sed -i '1s/^/\\\def\\\submit{}\n/' 'dirname/filename'

BTW, я думаю: "Как я могу предварительно ожидать тег к началу нескольких файлов?" был бы лучший вопрос сослаться, чем: "Вставляя текст в начале файла с sed через терминал в Linux", с которым был связан этот вопрос. Это имеет намного больше ответов.

2
27.01.2020, 20:48

Во-первых: обратные косые черты выхода не из-за оболочки - строка единственная заключенный в кавычки. Скорее это из-за sed самостоятельно.

Во-вторых: ответ Chris Down имеет некоторую заслугу - не используют молоток вместо отвертки. С другой стороны, мобильность и символьные ссылки являются не всегда проблемой, если это так, обоими

sed '1i\\\def\\submit{}'

и

sed '1i\\def\submit{}\'

Должен сделать то, в чем Вы нуждаетесь. Я не смог узнать, почему запаздывающая обратная косая черта в последней форме выключает выход в строке, но это, кажется, работает как этот, по крайней мере, в GNU sed когда команды помещаются на командную строку. При использовании в сценарии только первая форма, кажется, работает (потому что запаздывающая обратная косая черта используется для обозначения конца строки, которая сопровождается другим):

#!/bin/sed -f 
1i\
\\def\\submit{}              
0
27.01.2020, 20:48

Теги

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