2017-02-11 2 views
1

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

sed -i 's/.*/somefixedtext,&,someotherfixedtext/' ${f} 

somefixedtext,20,30,10,50,someotherfixedtext 

Я хочу улучшить выход с помощью переменной, чтобы дать мне ниже, вместо того, что выше;

HELLO,somefixedtext,20,30,10,50,someotherfixedtext 

Пробовал некоторые варианты, но все не удалось;

VARIABLE="HELLO" 
sed -i 's/.*/"$VARIABLE,somefixedtext,&,someotherfixedtext/' ${f} 

Как я могу включить переменный строковое начало строки, в сочетании с fixedstring, в Sed?

ответ

2

Sed является плохим выбором, если строка замены из переменной, поскольку он рассматривает переменную как SED команды, а не символьной строки, так что он сломается, если переменная содержит специальные символы, такие как / или & или аналогичный.

Awk лучше подходит для этой задачи, например, как:

$ cat file 
20,30,10,50 

$ var=hello 

$ awk -F, -v prefix="$var" -v OFS=, '{print prefix, "sometext", $0, "somethingelse"}' file 
hello,sometext,20,30,10,50,somethingelse 

Для INPLACE модификации вам потребуется последняя версия GNU AWK, и -i inplace аргументы.

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

VARIABLE="HELLO" 
sed -i 's/.*/'"$VARIABLE"',somefixedtext,&,someotherfixedtext/' ${f} 
+1

Спасибо большое, версия работы Sed очень хорошо. Эти две одиночные кавычки съели мои 2 часа :) –

Смежные вопросы