파일에 쓰기 전에 파일 내용을 지우는 방법은 무엇입니까? 예를 들어:
echo one > filename.tmp
# filename.tmp now contains "one"
echo two > filename.tmp
# filename.tmp should now contain "two", not "one" and "two"
내 목표는 다음과 같습니다
리스너 시작
$ nc -l 7007 > /var/tmp/test.log
데이터 좀 보내
$ telnet localhost 7007 hi second_word
테스트 파일
$ cat /var/tmp/test.log second_word
나는 "hi"가 로그에 나타나는 것을 원하지 않습니다. 나는 그것을 "second_word"로 대체하고 싶습니다.
답변1
nc에서는 해당 옵션을 제공하지 않기 때문에 새 파일을 지우고 쓰려면 별도의 프로그램이 필요합니다.
nc -l 7007 | while true; do
while read line; do
echo "$line" > /tmp/test
done
done
파일 경로를 허용하는 별도의 스크립트에서 파이프 뒤의 모든 내용을 저장할 수 있습니다.
마지막 줄을 저장하세요.sh
while true; do
while read line; do
echo "$line" > $1
done
done
그렇다면 매우 간단합니다.
nc -l 7007 | save-last-line.sh /var/tmp/test.log
$1
쓰기 가능한지 확인하고 지정되지 않은 경우 사용법을 표시하려면 검사를 추가해야 합니다 $1
.
답변2
command > /path/to/file
파일이 지워지고 출력이 command
해당 파일에 기록됩니다.
때를아니요이 파일을 지우고 싶습니다. 입니다 command >> /path/to/file
.
한 가지 주목할 점은 noclobber
셸의 옵션입니다. >
연산자를 사용하여 파일을 지우는 것을 방지합니다 . 재정의를 사용하여 이 옵션을 재정의 >!
하거나 설정을 해제 할 수 있습니다 set +o noclobber
.
명령줄에서 다음을 시도해 보세요.
# echo "Hello, " > /tmp/test
# cat /tmp/test
Hello
# echo "U&L" > /tmp/test
# cat /tmp/test
U&L
# echo "Hello," > /tmp/test
# echo "U&L" >> /tmp/test
# cat /tmp/test
Hello,
U&L
#