我正在使用 crudini 在 ini 文件中添加和删除部分和参数。 crudini 运行后,文件中留下了多余的空行,我想要清理这些空行,以便每个部分仅由 1 个空行分隔。以下函数中的 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
双箭头 (>>) 用于将数据附加到文件,
使用单箭头 (>) 覆盖文件。
答案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
}
我确信有更好的方法可以做到这一点,但不知道更好,这就是我想出的方法和我将使用的方法。