다음 grep 명령을 파일로 출력하려면 어떻게 해야 합니까?

다음 grep 명령을 파일로 출력하려면 어떻게 해야 합니까?

저는 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 "^--$"
}

데이터테스트.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_inigrep 명령 후에 사용해 보았습니다 . 실제로 무엇을 하는지는 잘 모르겠지만, 내 추측으로는 각 줄의 마지막 빈 줄의 결과를 쓰는 것 같습니다. 이것을 사용하면 >> $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
}

이 작업을 수행하는 더 좋은 방법이 있다고 확신하지만 더 나은 방법은 없습니다. 이것이 제가 생각해낸 방법이고 앞으로 사용할 방법입니다.

관련 정보