2016-05-31 3 views
2

У меня есть скрипт, который содержит несколько переменных. Один из них - это проприетарный путь MYPATH.
Я хочу сохранить вывод MYPATH, а затем заменить другую переменную SOME_OTHER_PATH с тем же значением.sed: Сохранить вывод и заменить

Текущая запись в myfile.sh

MYPATH="/opt/local/custom/myfiles" 
SOME_OTHER_PATH="" 

Вывод, который я хочу

MYPATH="/opt/local/custom/myfiles" 
SOME_OTHER_PATH="/opt/local/custom/myfiles" 

сценарий, который я написал это делает

mylocalpath=`sed -n /^MYPATH/p' myfile.sh | sed -e 's/MYPATH/'` 
sed -i -e "s/^SOME_OTHER_PATH/${mylocalpath}" myfile.sh 

Есть две проблемы здесь

  1. Поскольку ${mylocalpath} содержит «/», SED пытается оценить эти и бросает исключение
  2. Я хотел бы связать весь скрипт в SED файл (вместо запуска СЕПГ дважды) и выполнить его как

    sed -f sed_file myfile.sh 
    
+0

для задачи № 1, см [этот ответ по поводу вылетающих символов СЕПГ] (http://stackoverflow.com/ а/29613573/2877364) – cxw

ответ

2

Хотя я уверен, что это возможно с помощью СЭД, я бы рекомендовал использовать AWK:

awk -F'"' '/^MYPATH=/ { path = $2 } /^SOME_OTHER_PATH=/ { $0 = $1 path "\"" } 1' file 

Сохраните путь к переменной, когда линия начинается с MYPATH и использует ее, когда линия начинается с SOME_OTHER_PATH. 1 на конце является самым коротким истинным значением и { print } является действием по умолчанию, поэтому каждая строка печатается.

Для выполнения «на месте» редактировать, просто использовать временный файл:

awk ... file > tmp && mv tmp file 
Смежные вопросы