Как я могу вывести следующую команду grep в файл?

Я использую crudini для добавления и удаления разделов и параметров в ini-файле. После запуска crudini в файле остаются лишние пустые строки, которые я хочу очистить, так что каждый раздел отделяется только одной пустой строкой. Команда grep в следующей функции работает, но когда я пытаюсь перенаправить вывод в файл, в результате я получаю пустой файл.

Код

sctn="Section Two"
mypath="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
my_ini=$mypath/test.ini
ini_sec=$sctn

function inidel () {
  crudini --del --verbose $my_ini "$ini_sec"
  grep -A1 . $my_ini | grep -v "^--$"
}

function iniadd () {
  crudini --set --verbose $my_ini "$ini_sec"
  grep -A1 . $my_ini | grep -v "^--$"
}

Данные test.ini

 1| [Section One]
 2| Parameter1=x1
 3| Parameter2=example1
 4| Parameter3=one
 5|
 6| [Section Two]
 7| Parameter1=x2
 8| Parameter2=example2
 9| Parameter3=two
10|
11| [Section Three]
12| Parameter1=x3 
13| Parameter2=example3
14| Parameter3=three
15|

Я пробовал использовать > $ my_ini после команды grep. Я точно не знаю, что он делает на самом деле, но предполагаю, что он записывает результат для каждой строки, заканчивающейся последней пустой строкой. Если я использую >> $ my_ini , он пишет правильно, но добавляет текст вместо его перезаписи.

-1
05.04.2017, 20:51
2 ответа

Проблема заключалась в том, что я пытался записать в тот же файл, с которым работал. Если я использую временный файл, выведите его в my_ini, он работает.

Используя исходный код моего вопроса, это работает.

function inidel () {
  crudini --del --verbose $my_ini "$ini_sec"
  grep -A1 . $my_ini | grep -v "^--$" > tmpfile
  cat tmpfile > $my_ini
}

Это тоже работает при использовании cat.

function inidel () {
  crudini --del --verbose $my_ini "$ini_sec"
  cat $my_ini > tmpfile
  cat -s tmpfile > $my_ini
}

Я уверен, что есть более эффективные способы сделать это, но я не знаю ничего лучшего, это то, что я придумал и что буду использовать.

0
28.01.2020, 05:10

Двойная стрелка (>>) предназначена для добавления данных в файл,

Используйте одну стрелку (>) для перезаписи файла.

1
28.01.2020, 05:10

Теги

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