GNU/Linux >> Znalost Linux >  >> Linux

Nula vyplňte čísla na 2 číslice se sed

Jiné řešení:awk '{$2 = sprintf("%02d", $2); print}'


$ sed 's/\<[0-9]\>/0&/' ./infile
201103 01 /mnt/hdd/PUB/SOMETHING
201102 07 /mnt/hdd/PUB/SOMETH ING
201103 11 /mnt/hdd/PUB/SO METHING
201104 03 /mnt/hdd/PUB/SOMET HING
201106 01 /mnt/hdd/PUB/SOMETHI NG

Zde je (ne) způsob použití bash s rozšířeným regulárním výrazem ..
Tato metoda umožňuje provádět komplexnější zpracování jednotlivých řádků. (tj. více než jen substituce regulárních výrazů)

while IFS= read -r line ; do
    if [[ "$line" =~ ^(.+\ )([0-9]\ .+)$ ]]  
    then echo "${BASH_REMATCH[1]}0${BASH_REMATCH[2]}" 
    else echo "$line"
    fi
done <<EOF
201103 1 /mnt/hdd/PUB/SOMETHING
201102 7 /mnt/hdd/PUB/SOMETH ING
201103 11 /mnt/hdd/PUB/SO METHING
201104 3 /mnt/hdd/PUB/SOMET HING
201106 1 /mnt/hdd/PUB/SOMETHI NG
EOF

výstup:

201103 01 /mnt/hdd/PUB/SOMETHING
201102 07 /mnt/hdd/PUB/SOMETH ING
201103 11 /mnt/hdd/PUB/SO METHING
201104 03 /mnt/hdd/PUB/SOMET HING
201106 01 /mnt/hdd/PUB/SOMETHI NG

Linux
  1. Použití sed k rozdělení řetězce s oddělovačem

  2. sed vložte řádek s mezerami na konkrétní řádek

  3. Zaokrouhlování čísel s bc v Bash

  1. Manipulace s textem na příkazovém řádku pomocí sed

  2. Jak rekurzivně nahradit znaky sed?

  3. Regulární výraz se sed

  1. Použití více vzorů najednou pomocí příkazu Sed

  2. Smazání všech C komentářů se Sedem?

  3. Barvení výstupu ocasu pomocí Sed?