2013-05-20 8 views
1

Что я делаю неправильно?Замена текста с помощью sed

sed -i 's/** [out :: [email protected]]/machine-6/g' file1.csv 
Error -: sed: -e expression #1, char 58: Invalid range end 

Я в принципе хочу, чтобы заменить [email protected] только с машинно-6 через баш?

Кроме того, я хочу сделать это для всех машин (7 из них), так что я должен буду писать эту строку индивидуально для каждого, или я могу использовать одну и ту же линию замены для всех из них?

Любая помощь по оценке

ответ

4

Квадратные скобки - специальные символы. Когда вы имеете в виду их буквально, вы должны избавиться от них, а также точек:

\[out :: apple\[email protected]\.mysite\.com\] 

Кроме того, если вы имеете в виду звездочек буквально, то лучше, чтобы избежать их, а также.

И да, вы можете написать цикл для запуска через 7 номеров машин с помощью seq:

for i in $(seq 7); do 
    sed -i "s/\*\* \[out :: apple\[email protected]$i\.mysite\.com]/machine-$i/g" file1.csv 
done 

Примечания двойных кавычек, которые я использовал здесь, как одиночные кавычки prevernt расширения переменного.

+0

Спасибо .... Любая помощь со второй частью? Я пишу его отдельно для каждой машины или есть лучший способ сделать это? –

+0

@PratikBothra Я обновил ответ –

+0

Это все хорошо .... Спасибо. Примите ответ за 4 минуты. –

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