Вставка текста с помощью sed в начале строки дает ошибку

Я пытаюсь изменить файл с помощью sed, но получаю ошибку, которую не понимаю:

sed: -e выражение #1, char 0: нет предыдущего регулярного выражения

Команда:

sed -e 's/^/"asset\//' example.txt

Пример файла:

joe
john
peter

sed из msys2:

which sed

sed является внешним: C:\msys64\usr\bin\sed.exe

При добавлении текста в конец каждой строки следующее работает как положено:

sed -e 's/$/",/' y.txt

Джо",
Джон",
Питер",

Я в растерянности, чтобы понять, что здесь не так.


person Gerhard    schedule 06.01.2020    source источник
comment
Что ж, это должно сработать. Не могли бы вы опубликовать вывод sed --version или sed -v, чтобы узнать, какой у вас sed?   -  person KamilCuk    schedule 06.01.2020
comment
СЭД (GNU-СЭД) 4.7   -  person Gerhard    schedule 06.01.2020
comment
Я думаю, что Windows делает что-то странное с ^. Если вы не можете избавиться от Windows (пожалуйста), попробуйте поместить скрипт в файл и использовать sed -f file y.txt   -  person tripleee    schedule 06.01.2020


Ответы (1)


EDIT (решение для cygwin): Попробуйте использовать cygwin sed, только что протестированный в системе, и он отлично работает из командной строки. При использовании ' одинарных кавычек с sed я получаю ту же ошибку, что и OP, но при использовании " в sed я могу получить правильное поведение sed (ожидаемый, добавить " перед каждой строкой)

sed -E "s/^/\"/"  Input_file


EDIT2 (взято из комментариев Tripleee): Вы также можете сохранить свою команду sed в файл с именем file с помощью команды s/^/\"/, а затем запустить код sed, выполнив, успешно протестировав его с помощью сигвин sed.

sed -f file Input_file


Альтернативное решение (протестировано и работает на cygwin): У меня нет с собой cygwin, поэтому я не могу протестировать его, хотя упомянутое вами решение отлично работает для BASH. Не могли бы вы попробовать использовать другой подход один раз? Я только что протестировал это решение и на cygwin, и там оно работало нормально (комментарий EDIT).

sed 's/\(.*\)/"\1/' Input_file
person RavinderSingh13    schedule 06.01.2020
comment
Первый вариант ничего не делает. - person Gerhard; 06.01.2020
comment
@Gerhard, вы хотите сохранить вывод в сам Input_file? Потому что это печатает правильный вывод для меня на терминале. - person RavinderSingh13; 06.01.2020
comment
@Gerhard, пожалуйста, проверьте мой ответ на EDIT сейчас, а потом дайте мне знать? Оба проверены и работают нормально для меня. - person RavinderSingh13; 06.01.2020
comment
OK Вариант 1 работает. Похоже, Windows что-то делает с ^ при использовании одинарных кавычек. - person Gerhard; 06.01.2020