2014-11-03 2 views
0

Я пытаюсь заменить строку в файле, который может отличаться на разных машинах. Например, линия может быть как в следующих примерах:Заменить динамическую строку в файле

testLine=14
testLine=320
testLine=abc

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

sed -i 's/testLine=*/testLine=test/g' fileName

Эта команда приведет в приведенных выше примерах становится:

testLine=test14
testLine=test320
testLine=testabc

Я хочу, чтобы эти строки только равный testLine=test и удалите то, что существует справа от знака равенства. Что мне нужно добавить к аргументам, которые приведут к результату, который я ищу?

ответ

1

Вы забыли добавить . перед *

sed -i 's/testLine=.*/testLine=test/' fileName 

ИЛИ

sed -i 's/^testLine=.*/testLine=test/' fileName 

Ваше регулярное выражение testLine=* соответствует строке testLine плюс следующие = ноль или более раз. Таким образом, он останавливается, когда он достигает =. Но testLine=.* будет соответствовать строке testLine плюс следующие ноль или более символов. В вашем случае, указанное регулярное выражение будет заменить всю строку с testLine=test

+1

doh .... спасибо :) Я отвечу на ответ через 8 минут – KSdev

+0

'g' в этом случае не требуется ;-) – NeronLeVelu

+0

спасибо, я забываю каждый раз. –

0

с использованием AWK

awk -F "=" '{if($1 == "testLine") printf("%s=test%s\n",$1,$2)}' file.txt > file.txt 

outupt:

testLine=test14 
testLine=test320 
testLine=testabc 

Я использовал -F "=" в качестве входного fiels, так что $ 1 до "=" и $ 2 после "=", я использовал printf для получения желаемого вывода

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