sedまたはawkを使用してパターンの前の点を置き換えます。

sedまたはawkを使用してパターンの前の点を置き換えます。

2つの入力が得られます。

  1. 67.1.3.0.0.221111.1または
  2. 89.1.5.0.0.221112

221111日付パターン()の前の点を下線に変更したいと思います。

  1. 67.1.3.0.0.221111.1入出力67.1.3.0.0_221111.1

  2. 89.1.5.0.0.221112入出力89.1.5.0.0_221112

答え1

orを置き換えると、各入力行の5番目の点が一致し、sed下線で置き換えられます。s/\./_/5s/[.]/_/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

関連情報