내 로그를 정렬하려고하는데 한 자리 날짜가 잘못 잘리는 것을 발견했습니다. 0을 추가하거나 여분의 공백을 제거하십시오.
그 전에 편집하려는 올바른 줄을 얻는 방법을 알고 싶었습니다.
마지막 3 줄 :
$tail -3 testlog Wed Feb 7 23:30:59 2018 daemon.info hostapd: wlan0: STA de:ad:be:ef:c0:fe WPA: group key handshake completed (RSN) Wed Feb 7 23:40:59 2018 daemon.info hostapd: wlan0: STA de:ad:be:ef:c0:fe WPA: group key handshake completed (RSN) Wed Feb 7 23:50:59 2018 daemon.info hostapd: wlan0: STA de:ad:be:ef:c0:fe WPA: group key handshake completed (RSN)
이제 스크립트로 작업하면서 동일한 결과를 기대하면서 다음과 같이 썼습니다.
$ while read line; do if [ $(echo $line|cut -c7) == "b" ]; then echo $line; fi; done < testlog | tail -3 Wed Feb 7 23:30:59 2018 daemon.info hostapd: wlan0: STA de:ad:be:ef:c0:fe WPA: group key handshake completed (RSN) Wed Feb 7 23:40:59 2018 daemon.info hostapd: wlan0: STA de:ad:be:ef:c0:fe WPA: group key handshake completed (RSN) Wed Feb 7 23:50:59 2018 daemon.info hostapd: wlan0: STA de:ad:be:ef:c0:fe WPA: group key handshake completed (RSN)
하지만 이것으로 7 앞의 여분의 공간이 제거됩니다. 이런 일이 발생할 것으로 예상하지 못했습니다. “대본으로 자르지 않습니까?
미리 감사합니다!
p>
댓글
- 단어 분리 란 무엇입니까? 쉘 프로그래밍에서 왜 이것이 중요한가요? , BashGuide : 단어 분할
- 아니면 그냥 이것을 내 쉘 스크립트가 공백이나 기타 특수 문자로 인해 질식하는 이유는 무엇입니까?
- great link @ilkkachu
답변
다른 두 배 (또는 그 이상) 공백에 대해서도 동일하게 표시됩니다. 따옴표가없는 변수 확장 뒤에는 단어 분할 이 따르기 때문에 단어가 공백 (IFS)으로 분할되면 그 사이에 하나의 공백이있는 재 조립됩니다.
한 가지 해결 방법은 다음과 같습니다. :
쉘은 매개 변수 확장, 명령 대체 및 산술 확장의 결과를 스캔합니다. 단어 분할의 경우 큰 따옴표 안에 표시됩니다.
구체적인 예는 다음을 참조하세요.
$ line="Wed Feb 7 23:30:59" $ echo $line Wed Feb 7 23:30:59
대 :
$ line="Wed Feb 7 23:30:59" $ echo "$line" Wed Feb 7 23:30:59
읽을만한 가치가 있습니다. 쉘 스크립트가 공백이나 기타 특수 문자로 인해 질식하는 이유는 무엇입니까?
댓글
- 예 :
var='1 1'
(공백이 많으면 마크 업에서 사라짐 여기) 뒤에echo $var
및echo "$var"
가 표시됩니다. - 실제로 훌륭한 점입니다. '는 공백을 잃는 ' 인용되지 않은 에코입니다.
- 매우 명확합니다! 감사합니다 @JeffSchaller 및 kusalananda