![다음 grep 명령을 파일로 출력하려면 어떻게 해야 합니까?](https://linux55.com/image/109005/%EB%8B%A4%EC%9D%8C%20grep%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%ED%8C%8C%EC%9D%BC%EB%A1%9C%20%EC%B6%9C%EB%A0%A5%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
저는 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_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
}
이 작업을 수행하는 더 좋은 방법이 있다고 확신하지만 더 나은 방법은 없습니다. 이것이 제가 생각해낸 방법이고 앞으로 사용할 방법입니다.