tail 및 bash: 동일한 예상일 때 다른 출력

tail 및 bash: 동일한 예상일 때 다른 출력

로그를 정렬하려고 하는데 한 자리 날짜가 잘못 잘려 있는 것을 발견했습니다. 이제 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 이전의 추가 공백이 제거됩니다. 나는 이런 일이 일어날 것이라고 기대하지 않았습니다. 나는 그것을 대본에서 잘라내지 않을 것입니다. 그렇죠?

미리 감사드립니다!

답변1

다른 이중(또는 그 이상) 공백에도 동일하게 적용된다는 것을 알 수 있습니다.따옴표가 없는 변수 확장 뒤에는 단어 분사가 옵니다., 따라서 단어가 공백(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

읽어볼 만한 가치가 있는 내용:공백이나 기타 특수 문자 때문에 쉘 스크립트가 멈추는 이유는 무엇입니까?

관련 정보