Если не dos2unix, то есть и 'flip'
$ flip -u имя_файла.txt
переключит его на использование окончаний строк unix.
Добавить подстановочный знак в \s
.Это будет охватывать ноль или более пробелов. Тогда ваша команда будет:
sed -i 's/MY_VAR\s*=\s*[A-Z]*/MY_VAR=NO/' sed.txt
Кажется, что единственные пробелы, которые вам нужны для сопоставления, — это пробелы между именем переменной и знаком равенства. Все, что идет после знака равенства, все равно будет заменено.
Использование стандартаsed
:
sed 's/^\(MY_VAR\)[[:blank:]]*=.*/\1=NO/' params.txt
Выражение [[:blank:]]*
sub -будет соответствовать нулю или более пустым символам. «Пробел» — это табуляция или пробел. Подстановка заменяет всю строку, начинающуюся с имени переменной, за которой следуют необязательные пробелы и =
с именем переменной и строкой =NO
.
Тестирование:
$ cat params.txt
MY_VAR=YES
MY_VAR = MAYBE
MY_VAR = OK
$ sed 's/^\(MY_VAR\)[[:blank:]]*=.*/\1=NO/' params.txt
MY_VAR=NO
MY_VAR=NO
MY_VAR=NO
Для -места редактирования файла params.txt
правильно используйте -i
в зависимости от того, что sed
вы используете (см. Как добиться переносимости с помощью sed -i (в -место редактирования )?)или используйте
cp params.txt params.txt.tmp &&
sed 's/^\(MY_VAR\)[[:blank:]]*=.*/\1=NO/' params.txt.tmp >params.txt &&
rm -f params.txt.tmp