Способ автоматической замены исходного файла на вывод? [дубликат]

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
0
20.04.2017, 16:51
3 ответа

Использование Bash операторов истории:

sass-convert original.scss !#:$

!# обозначает текущую строку, :$ последний аргумент (на данный момент).

Это работает с sass-convert; но для более общего использования стоит отметить, что программы, которые усекают свой вывод до того, как они закончат обработку своего ввода, не будут работать при таком подходе.

1
28.01.2020, 02:15

В 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{,}
0
28.01.2020, 02:15

Программы 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
$ 
5
28.01.2020, 02:15

Теги

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