Я искал sed
команду для добавления текста в файл в определенной строке. Это работает, добавляя текст после строки 1:
sed '1 a\
Но я хочу добавить его перед строкой 1. Это будет:
sed '0 a\
но я получаю эту ошибку: invalid usage of line address 0
.
Любое предложение?
text-processing
command-line
sed
Маноло
источник
источник
Ответы:
Используйте опцию
sed
'insert (i
), которая вставит текст в предыдущей строке.Обновление автора вопроса:
Чтобы заставить его редактировать файл на месте - с помощью GNU
sed
- мне пришлось добавить-i
опцию:Также синтаксис
Для не GNU sed
Вам нужно нажать клавишу возврата сразу после обратной косой черты
1i\
и послеfirst_line_text
:Также обратите внимание, что некоторые реализации не-GNU
sed
(например, в macOS) требуют аргумента для-i
флага (используйте-i ''
для получения того же эффекта, что и в GNUsed
).источник
-i
опции. Я обновлю ваш ответ, прежде чем принять.sed '1 i\this text is entered above the existing first line' file
у меня работает.sed (GNU sed) 4.2.2
простоsed '1 i text to insert' -i file
работает как шарм. Спасибоawk
ниже. Это должно работать.Эхо используется для получения текста. Cat filename - печатает файл в консоли и> использует его для отправки в другой файл filename1, а затем мы перемещаем filename1 в filename, чтобы получить текст, вставленный в первую строку нужного файла.
источник
Вы можете использовать Vim в режиме Ex:
1
выберите первую строкуi
вставить текст и перевод строкиx
сохранить и закрытьисточник
Вы хотите вставить текст перед первой строкой, а не добавлять его после, поэтому используйте
Здесь также может помочь документ:
источник
Использование GNU awk> = 4.1:
В отличие от всех
sed
ответов, это работает и для пустых файлов.источник
inplace
это библиотека, и, к сожалению, она появляется во всех дистрибутивах awk. Я получаю "awk: fatal: не могу открыть исходный файл" на месте "для чтения"GNU Awk 4.2.1, API: 2.0 (GNU MPFR 4.0.1, GNU MP 6.1.2)
Если вы не укажете эту
-i
опцию, она не будет отображать никаких ошибок и отображает вывод на стандартном терминале, но не вставляет текст в файл.источник
-i
выключателе.gnu sed
специфичны, и просто случается так, чтоgnu sed
они примутi
без обратной косой черты). Если другие думают, что это требует отдельного ответа + повышенный голос ... о, хорошо.Команда, с которой
0a
вы попытались , работаетex
, предшественникvi
:Команда
printf
сама выводит:Эти
0a
средства после того, как добавить 0 - й строки (т.е. до первой строки).Следующая строка или несколько строк - это текст, который нужно добавить.
Функция
.
on on сама завершает команду "append".В
x
причинах Ex , чтобы сохранить изменения в файл и выйти.источник
Я удивлен, что в этом старом вопросе никто не показал самую обычную (и в данном случае довольно простую) команду sed:
Который работает в большинстве оболочек и переносим для нескольких версий sed.
Если доступен GNU sed, вы можете использовать это:
Разница в том, что GNU sed позволяет использовать a
\n
для новой строки, а другим нужен буквальный символ новой строки, которому предшествует обратный слеш (который в любом случае также работает в GNU sed).Если используется оболочка, которая принимает
$'…'
синтаксис, вы можете вставить новую строку напрямую, поэтому sed увидит, что новая строка уже есть:Который работает для более sed версий.
источник
К сожалению, все ответы выше (в основном с
sed
) не сработали для меня, так как они все заменили первую строку. Я наUbuntu 16.04 LTS
машине. Вот мой обходной путь сGNU Awk 4.0.2
:источник
sed
ответ, который использует замену, но он не заменяет существующую строку.В общем и целом
Я бы предположил, что любой, кто искал, как вставить / добавить текст в начало / конец файла, вероятно, также должен знать, как сделать другой.
объяснение
Это
cal
выводится по конвейеру в gnu-sed
( вызываетсяgsed
на macOS, установленном через brew.sh ) с расширенным RegEx (-E
) и применены 6 «скриптов» (-e
), а разрывы строк экранированы\
для удобства чтения. Сценарии 1 и 2 используются1i\
для «в строке 1 вставить». Сценарии 5 и 6 используются$a\
для «в строке <последний>, добавить». Я выровнял текстовые выходные данные по вертикали, чтобы код представлял то, что ожидается в результате. Сценарии 3 и 4 выполняют подстановки (последние применяются только к «line <last>»). Результатом является преобразование вывода команды в допустимый JSON.выход
источник
1i
для вставки текста перед первой строкой. Кто-то с этим вопросом должен будет извлечь необходимые части из вашего ответа, чтобы решить свою проблему. Вопросы бесплатны, поэтому я бы пригласил вас задать свой вопрос и ответить на него, чтобы дать конкретный ответ.