sed в bash с переменными и двойными кавычками вызывает неисполненную ошибку

У меня есть следующий код, и я продолжал получать unterminated error . Например, $1 может быть ABC-TXT-123 и я хочу заменить TEXT abc.123 в файле на ABC-TXT-123 .

 #!/bin/bash id=$1 if [[ $id =~ .*TXT.* ]]; then sed -i "s/TEXT abc.*/TEXT $id/" someDataFile fi 

  • Как установить переменные среды для программы, выполненной с помощью `nohup`?
  • shell scripting - несколько тестов равенства в одном выражении if
  • Получить логическое имя беспроводной сети
  • Как использовать awk для печати только строк, содержащих 5 столбцов
  • Отрицательные аргументы для головы / хвоста
  • Как сгенерировать много (пустых) файлов изображений?
  • Как безопасно загружать файлы в сценарии оболочки?
  • Как я могу запускать команду периодически и неограниченно, пока она не отключится?
  • 2 Solutions collect form web for “sed в bash с переменными и двойными кавычками вызывает неисполненную ошибку”

    Он отлично работал со следующими командами:

     $ cat > test asd asd asd asd asd TEXT abc.123 asd asd asd asd asd $ var='ABC-TXT-123' $ sed -i "s/TEXT abc.*/TEXT $var/" test $ cat test asd asd asd asd asd asd TEXT ABC-TXT-123 asd asd asd asd asd 

    Возможно, вы могли бы предоставить нам также фрагмент файла …

    На OSX мне пришлось включить дополнительный '' чтобы заставить его работать:

     #!/bin/bash id=$1 if [[ $id =~ .*TXT.* ]]; then sed -i '' 's/TEXT abc.*/TEXT '$id'/' someDataFile fi 

    что означает, что содержимое someDataFile переходит из «TEXT abc.123» в «TEXT ABC-TXT-123». Но ваше описание требует немного отличаться, поэтому вы можете:

      sed -i '' 's/TEXT abc.*/'$id'/' someDataFile 

    вместо этого, чтобы заменить всю строку и не поставить слово «ТЕКСТ» обратно …

    Linux и Unix - лучшая ОС в мире.