sed 또는 awk를 사용하여 패턴 앞의 점을 교체하세요.

sed 또는 awk를 사용하여 패턴 앞의 점을 교체하세요.

두 가지 입력을 얻을 수 있습니다.

  1. 67.1.3.0.0.221111.1, 또는
  2. 89.1.5.0.0.221112

221111날짜 패턴( ) 앞의 점을 밑줄로 바꾸고 싶습니다 .

  1. 입출력67.1.3.0.0.221111.167.1.3.0.0_221111.1

  2. 입출력89.1.5.0.0.22111289.1.5.0.0_221112

답변1

or 를 바꾸면 각 입력 줄의 다섯 번째 점을 일치시키고 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

입력이 두 가지 형식만 사용하도록 지정되었으므로 이는 입력을 날짜로 해석하는 것을 무시하고 입력 형식의 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

관련 정보