/08/を/8/に変換するには、どのsedコマンドを使用する必要がありますか?
コマンド出力から追加のゼロをすべて削除したいです。
私はそれを不快な余分なゼロに減らしました。
sed -ie 's/\/0[1-9]\//\/[1-9]\//g' ~/tmp
出力:
at 12:27 AM on 5/[1-9]
sed -ie 's/\/0?\//\/?\//g' ~/tmp
出力:
at 12:27 AM on 5/08
フルスクリプト:
#!/bin/bash
echo $@ > ~/tmp
sed -ie 's/\/0[1-9]\//\/[1-9]\//g' ~/tmp
AA=`awk '{print $2}' ~/tmp | awk -F : '{print $1":"$2}' | sed 's/^0*//'`
BB=`awk '{print $3}' ~/tmp`
CC=`awk '{print $1}' ~/tmp | awk -F / '{print $1"/"$2}' | sed 's/^0*//'`
DD=`awk '{print $5}' ~/tmp | awk -F : '{print $1":"$2}' | sed 's/^0*//'`
EE=`awk '{print $6}' ~/tmp`
FF=`awk '{print $4}' ~/tmp | awk -F / '{print $1"/"$2}' | sed 's/^0*//'`
if [ $# = 3 ]; then
echo "at $AA $BB on $CC"
elif [ $# = 6 ] && [ $CC = $FF ]; then
echo "from $AA $BB to $DD $EE on $FF"
elif [ $# = 6 ]; then
echo "from $AA $BB on $CC to $DD $EE on $FF"
fi
rm ~/tmp
入力と出力の例(エイリアス= dt):
現在のsedコマンドの使用
dt 05/08/2017 02:27:25 AM
5/[1-9] 午前2時27分
最初のsedコマンドはありません
dt 05/08/2017 02:27:25 AM
5月8日午前2時27分
解決済み - 3行目を次に置き換えます。
sed -rie 's/\/0(.?)/\/\1/g' ~/tmp
dt 05/08/2017 01:03:56 AM
出力:5月8日午前1時3分
ベストアンサー1
ノート:解決策をできるだけ一般的にするために編集された答えです。編集履歴を見て、元々行われたことを確認し、以前に回答した質問に対するコメントを確認してください。
ここで重要なのは、拡張正規表現を()
と にグループ化することです。-r
パターンをグループ化すると、パスシンボル内の位置に基づいてパターンを参照()
できます。\NUMBER
特に心の中に浮かぶのは次のとおりです。
sed -r 's/0*([^0]+)\/0*([^0]+)/\1\/\2/g'
内容は次のとおりです。
- 0個以上の0個の文字と一致します。
- 次の 1 つ以上のゼロ以外の文字を結合します。
- 次に、スラッシュの後にゼロ文字以上のゼロ文字が続くことを見つけます。
- 次の 1 つ以上のゼロ以外の文字を結合します。
実際、これは可変数のゼロにも当てはまります。
$ echo "at 12:27 AM on 11/08/2017" | sed -r 's/0*([^0]+)\/0*([^0]+)/\1\/\2/g'
at 12:27 AM on 11/8/2017
$ echo "at 12:27 AM on 00000011/000008/00002017" | sed -r 's/0*([^0]+)\/0*([^0]+)/\1\/\2/g'
at 12:27 AM on 11/8/00002017
$ echo "at 12:27 AM on 011/08/00002017" | sed -r 's/0*([^0]+)\/0*([^0]+)/\1\/\2/g'
at 12:27 AM on 11/8/00002017
$ echo "at 12:27 AM on 000000011/0000008/00002017" | sed -r 's/0*([^0]+)\/0*([^0]+)/\1\/\2/g'
at 12:27 AM on 11/8/00002017
必要に応じて、年の部分の内容を維持するのに十分です。この問題を排除するには、3番目のグループを追加することもできます。
$ echo "at 12:27 AM on 005/0025/0002017" | sed -r 's/0*([^0]+)\/0*([^0]+)\/0*([^0]+)/\1\/\2\/\3/g'
at 12:27 AM on 5/25/2017
これは他のキャラクターにも当てはまります(必須ではありませんが、お勧めします)。
$ echo "at 12:27 AM on 0November/00Fifth/2017" | sed -r 's/0*([^0]+)\/0*([^0]+)/\1\/\2/g'
at 12:27 AM on November/Fifth/2017