入力:
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
望ましい出力:
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
たとえば、1桁しかない場合、0
を追加するにはどうすればよいですか。 1
は「日」の部分ですか?次の日付形式が必要です:YYYYMM DD。
$ 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
別の解決策:awk '{$2 = sprintf("%02d", $2); print}'
bashとextended regex。を使用する(非sed)方法を次に示します。
この方法により、スコープは個々のラインのより複雑な処理を行うことができます。 (すなわち、単なる正規表現置換以上のもの)
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
出力:
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
私はこのようなことをします:
_sed -E 's/ ([0-9]) / 0\1 /' ./input
_
これは孤独な数をつかみ、グループ' ([0-9]) '
で空白を取り除き、次にそれらを0と空白のパディング_' 0\1 '
_で戻します。
_-E
_オプションを使用すると、OSXで最新のRegEx式を使用できます(そのため、_"\"
_を頻繁に使用する必要はありません)。_-r
_は、テストしたLinuxシステムでも同じことを行います。