farok és bash: eltérő kimenet, ha ugyanaz várható

Megpróbálom rendezni a naplóimat, és azt tapasztaltam, hogy az egyjegyű dátumokat helytelenül vágták ki. Most szeretném vagy adj 0-t, vagy távolítsd el a plusz helyet.
Előtte meg akartam nézni, hogyan lehet megszerezni a szerkeszteni kívánt sorokat.

Az utolsó 3 sor farka:

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

Most a szkript felé haladva ezt írtam, arra számítva, hogy ugyanazt az eredményt kapom:

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

De ezzel a 7 előtti extra helyet eltávolítják. Nem számítottam rá, hogy ez megtörténik. Ugye, nem vágom le a szkriptemmel?

Előre is köszönöm!

Megjegyzések

Válasz

Ugyanezt észlelheti más duplázott (vagy több) szóköz esetén is. A nem jegyzett változóbővítéseket szófelosztás követi , így ha a szavakat szóközök osztják (IFS), azokat egy szóközzel egymás között összerakják.

Egy megkerülő megoldás lehet :

A shell a paraméterek kibővítésének, a parancsok cseréjének és az aritmetikai kiterjesztésnek az eredményeit vizsgálja dupla idézőjelek között fordulhatnak elő a szó felosztásához.

Konkrét példaként lásd:

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

szemben:

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

Érdemes elolvasni: Miért fojtja el a shell szkript a szóközöket vagy más speciális karaktereket?

megjegyzések

  • példa: var='1 1' (sok szóközzel eltűnnek a jelölésben itt), amelyet echo $var és echo "$var" követ.
  • Tulajdonképpen kitűnő pont; ' s azt a nem idézett visszhangot, amely ' elveszíti a szóközöket.
  • nagyon világos! köszönöm @JeffSchaller és kusalananda

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük