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 

  • Ошибка сценария после команды bc
  • bash скрипт переименовывает входной файл при копировании
  • проблема с обратными кавычками внутри цикла while при выполнении команды над ssh
  • подчеркивание с двумя переменными
  • Перебирайте файл и читайте значения из двух столбцов в переменные
  • сценарий для повторения команды tshark и каждую минуту, изменяющую имя выходного файла
  • Параметры команды загрузки из файла верхнего уровня
  • В скобках действительно помещается команда в подоболочку?
  • 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 - лучшая ОС в мире.