Почему моя команда sed не работает с двойными кавычками? - PullRequest
0 голосов
/ 19 июня 2019

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

sed -n '/sweet/,$p' file

Он работает отлично, но мне нужно изменить «сладкий» на переменную, так как это переменная яПредположим, мне нужно использовать двойные кавычки вместо одинарных кавычек, однако, когда я запускаю эту команду:

sed -n "/$variable/,$p" file

я получаю следующую ошибку:

sed: -e expression #1, char 11: unexpected `,'

Как я могу заставить эту команду работать

Ответы [ 2 ]

3 голосов
/ 19 июня 2019

Одинарные кавычки говорят оболочке вообще не выполнять никакого раскрытия, а sed получает три аргумента -n, /sweet/,$p и file.

При использовании двойных кавычек переменные расширяются.Предполагая, что variable=sweet и p не установлены, второй sed вызов получил следующие три аргумента: -n, /sweet/, и file.Спецификатор адреса, в котором за , не следует ничего недопустимого и выдавшего вам ошибку, которую вы видели.

Если вы хотите смешать (буквальное) $ и расширение переменной в одном аргументе,у вас есть несколько вариантов:

  • "/$variable/,\$p", который экранирует $
  • "/$variable/"',$p' или аналогичную комбинацию одиночных и двойных частей строки в кавычках для обработки $ в каждой изего сегмент по мере необходимости.
1 голос
/ 19 июня 2019

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

sed -n '/'"${var}"'/,$p' file

Я знаю, что это работает, однако я еще не использовал это, поэтому я не знаю, является ли это правильным способом сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...