pyrstö ja bash: erilainen tulos, kun odotetaan samaa

Yritän lajitella lokini ja huomasin, että yksinumeroiset päivämäärät leikattiin väärin. Nyt haluan joko lisää 0 tai poista ylimääräinen tila.
Ennen sitä halusin nähdä, kuinka saan oikeat muokattavat rivit.

Kolmen viimeisen rivin häntä:

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

Työskentelyni komentosarjan parissa kirjoitin tämän odottaen saavan saman tuloksen:

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

Mutta tällöin ylimääräinen tila ennen 7: ää poistetaan. En odottanut tämän tapahtuvan. En leikkaa sitä skriptilläni, vai mitä?

Kiitos jo etukäteen!

Kommentit

vastaus

Huomaa saman muillekin kaksinkertaistetuille (tai useammille) välilyönneille. Noteeraamattomien muuttujien laajennusten jälkeen seuraa sanojen jakaminen , joten kun sanat on jaettu välilyönneillä (IFS), ne kootaan uudelleen siten, että yksi väli on niiden välissä.

Yksi kiertotapa voi olla :

Kuori skannaa parametrien laajennuksen, komentojen korvaamisen ja aritmeettisen laajennuksen tulokset , jotka eivät esiintyä kaksoislainauksissa sanan jakamista varten.

Katso konkreettisena esimerkkinä:

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

vs.:

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

Kannattaa lukea: Miksi komentosarjan komentosarjani tukahduttaa tyhjää tilaa tai muita erikoismerkkejä?

kommentit

  • Esimerkki: var='1 1' (monilla välilyönneillä ne katoavat merkinnöistä täällä), jota seuraavat echo $var ja echo "$var".
  • Oikea piste; se ' s lainaamaton kaiku, joka ' menettää välilyönnit.
  • hyvin selvä! kiitos @JeffSchaller ja kusalananda

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *