tail and bash: different output when same is expect

Snažím se třídit své protokoly a zjistil jsem, že jednociferná data byla zkrácena nesprávně. Teď chci buď přidat 0, nebo odstranit mezeru.
Před tím jsem chtěl zjistit, jak získat správné řádky, které chci upravit.

Ocas posledních 3 řádků:

$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) 

Nyní, když jsem se dostal ke skriptu, napsal jsem toto a očekával stejný výsledek:

$ 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) 

Ale s tím se odstraní prostor navíc před sedmičkou. Nečekal jsem, že se to stane. Neřeším to svým skriptem, že?

Díky předem!

Komentáře

Odpověď

To samé byste si mohli všimnout i pro všechny další zdvojené (nebo více) mezery. Po neoznačených expanzích proměnných následuje rozdělení slov , takže jakmile jsou slova rozdělena mezerami (IFS), jsou znovu sestavena s jednou mezerou mezi nimi.

Může být jedno řešení :

Prostředí prohledá výsledky rozšíření parametrů, nahrazení příkazů a aritmetické expanze , které ne vyskytují se v uvozovkách pro rozdělení slov.

Konkrétní příklad:

$ line="Wed Feb 7 23:30:59" $ echo $line Wed Feb 7 23:30:59 

versus:

$ line="Wed Feb 7 23:30:59" $ echo "$line" Wed Feb 7 23:30:59 

Stojí za přečtení: Proč se můj skript škrtí mezerami nebo jinými speciálními znaky?

Komentáře

  • Příklad: var='1 1' (s mnoha mezerami zmizí ve značce zde) následované echo $var a echo "$var".
  • Vlastně vynikajícím bodem; ' s necitovanou ozvěnou, která ' ztrácí mezery.
  • velmi jasné! děkuji @JeffSchaller a kusalananda

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *