Как мне найти замену условно на awk или sed? - PullRequest
1 голос
/ 11 июля 2011

Файл с этим содержимым:

var1 = true

Как мне переключить это значение с помощью sed / awk?

Я посмотрел на группы, sed адреса ... но нигде не сказано, как сохранить возвращаемое значение, такое как "найдено" или "не найдено".Поиск заменяет var1 = true на var1 = false

edit : кажется, что запись в файл не выполняется .. ever:

sed 's/var1 = true/var1 = foo/g' ./variables1
sed 's/var1 = false/var1 = true/g' ./variables1
sed 's/var1 = foo/var1 = false/g' ./variables1

вывод командной строки:

var1 = foo

var1 = true

var1 = true

странно

edit2 : он работал с sed -i для редактирования на месте

Ответы [ 2 ]

1 голос
/ 11 июля 2011

Использование gawk для захвата скобок:

printf "%s\n" "v1 = true" "v2=false" |
gawk '
    match($0, /([[:alnum:]]+)[[:space:]]*=[[:space:]]*(true|false)/, ary) {
        printf("%s = %s\n", ary[1], ary[2] == "true" ? "false" : "true")
    }
'

Производит

v1 = false
v2 = true

Чтобы записать в то же имя файла, используйте что-то вроде этого:

filename=./variables1
tmpfile=$(mktemp)   # or use tmpfile="$filename.tmp.$(date +%s).$$"

gawk '...' "$filename" > "$tmpfile" && 
  mv "$filename" "$filename"~ && 
  mv "$tmpfile" "$filename"

Удалите первый mv, если вы не хотите делать резервную копию файла.

1 голос
/ 11 июля 2011
sed 's/var1 = true/var1 = false/g'
...