sed подход:
sed -i 's/^\(SUT_INST_EXAMPLES\|SUT_INST_PING\)=false/\1=true/' file
файл
содержимое:
SUT_INST_PIT=true
SUT_INST_TICS=true
SUT_INST_EXAMPLES=true
SUT_INST_PING=true
\(SUT_INST_EXAMPLES\|SUT_INST_PING\)
- группа чередования, соответствует либо SUT_INST_EXAMPLES
ИЛИ SUT_INST_PING
в начале строки
Альтернативный gawk (GNU awk) подход:
gawk -i inplace -F'=' -v OFS='=' '$1~/^SUT_INST_(EXAMPLES|PING)/{$2=($2=="false")? "true":"false"}1' file
Использование Bash операторов истории:
sass-convert original.scss !#:$
!#
обозначает текущую строку, :$
последний аргумент (на данный момент).
Это работает с sass-convert
; но для более общего использования стоит отметить, что программы, которые усекают свой вывод до того, как они закончат обработку своего ввода, не будут работать при таком подходе.
В tcsh
или zsh
в режиме emacs
(обычно по умолчанию) вы можете ввести:
sass-convert original.scss Ctrl+Alt+_
Ctrl+ Alt+_ копирует предыдущее слово (виджет copy-prev-word
).
Обратите внимание, что он копирует предыдущее слово, разделенное пробелами, он не понимает кавычек или чего-то подобного (в отличие от !#:$
расширения истории в стиле csh).
Другой подход (также работает с bash
и другими оболочками на основе readline), все еще в режиме emacs
:
sass-convert original.scssCtrl+WCtrl+Y Ctrl+Y
С zsh вы также можете сделать:
(){sass-convert $1 $1} original.scss
С ( t)csh/ksh/zsh/bash, используя раскрытие фигурных скобок:
sass-convert original.scss{,}
Программы Unix могут иметь переключатель -i inplace
(например, в более ранней версии sed
его нет, но в большинстве случаев он есть, украв этот флаг из perl
), подробности см. на странице man
. Это обычно приводит к тому, что программа записывает вывод во временный файл, а затем выполняет вызов rename(2)
для записи нового вывода поверх исходного имени (это переименование может также разрушить контексты selinux или другие причудливые ACL в процессе, что может быть проблемой, если вы используете эти вещи).
Другим решением шаблона записи-в-tmp-файл-и-rename(2)
является губка
из moreutils
:
$ echo hi > file
$ tr h b < file | sponge file
$ cat file
bi
$