sed возможное совпадение пробелов

Если не dos2unix, то есть и 'flip'

$ flip -u имя_файла.txt

переключит его на использование окончаний строк unix.

-1
10.06.2021, 22:14
2 ответа

Добавить подстановочный знак в \s.Это будет охватывать ноль или более пробелов. Тогда ваша команда будет:

sed -i 's/MY_VAR\s*=\s*[A-Z]*/MY_VAR=NO/' sed.txt
3
28.07.2021, 11:25

Кажется, что единственные пробелы, которые вам нужны для сопоставления, — это пробелы между именем переменной и знаком равенства. Все, что идет после знака равенства, все равно будет заменено.

Использование стандарта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
4
28.07.2021, 11:25

Теги

Похожие вопросы