GNU/Linux >> Linux の 問題 >  >> Linux

sed で数字を 2 桁にゼロ埋めする

別の解決策: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

bash を使用する (非 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

Linux
  1. スマートクォートをLinuxsedコマンドに置き換えます

  2. Sed -i(インプレース編集)で移植性を実現するにはどうすればよいですか?

  3. 「sed」を追加しますか?

  1. 特殊文字でSedを使用していますか?

  2. SedまたはGrepを使用して正規表現に従って部分文字列を抽出しますか?

  3. リテラル文字列で sed -- 入力ファイルではありません

  1. sedを使用してコマンドラインでテキストを操作する

  2. Sedコマンドで一度に複数のパターンを使用する

  3. sed で \r 文字を削除する方法