2つの入力が得られます。
67.1.3.0.0.221111.1
または89.1.5.0.0.221112
221111
日付パターン()の前の点を下線に変更したいと思います。
67.1.3.0.0.221111.1
入出力67.1.3.0.0_221111.1
89.1.5.0.0.221112
入出力89.1.5.0.0_221112
答え1
orを置き換えると、各入力行の5番目の点が一致し、sed
下線で置き換えられます。s/\./_/5
s/[.]/_/5
$ printf '%s\n' 67.1.3.0.0.221111.1 89.1.5.0.0.221112 | sed 's/\./_/5'
67.1.3.0.0_221111.1
89.1.5.0.0_221112
入力は2つの形式のみを使用するように指定されているため、これは入力を日付として解釈することを無視し、入力形式の5番目の点を置き換える必要があるという事実にのみ依存します。
答え2
perl -pe 's/\.(?=\d{6}(?!\d))/_/g' < your-file
後に10進数6桁が続く内容はすべて変わります.
が、その後に数字はありません_
。
YYMMDD
日付にできない一連の数字が\d{6}
一致しないようにするには、それを\d\d(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[01])
良い開始に変更できます(ただし、220231はまだ許可されています)。
答え3
sedの場合は、次のものを使用できます。
myvar="67.1.3.0.0.221111.1"
echo $myvar | sed 's/\.\([0-9]\{6\}\)/_\1/'
67.1.3.0.0_221111.1