이 파일에는 다음이 포함됩니다.
dateutkfilename25012009
16~17번 문자의 위치를 18~19번 문자로 변경하고 싶습니다. 그런 다음 16번째 문자의 위치를 19번째 문자로 변경하고 20번째 문자의 위치를 23번째 문자로 변경합니다. 그러면 다음과 같습니다.
dateutkfilename20090125
아래 코드를 사용하여 16번째 문자를 17번째 문자로, 18번째 문자를 19번째 문자로 변경하려고 시도했지만 왜 작동하지 않는지 모르겠습니다.
'/dateutkfilename/s/\(.\{16\}\)\([0-9]\{2\}\)\(.*\)/\(.\{18\}\)\([0-9]\{2\}\)\(.*\)/g'
답변1
귀하의 질문에 대한 답변은 다음과 같습니다.
s/^\(.\{15\}\)\(.\{2\}\)\(.\{2\}\)\(.\{4}\)/\1\4\3\2/
하지만 끝까지 고정할 수 있으면 상황이 더 쉬워집니다.
s/\(.\{2\}\)\(.\{2\}\)\(.\{4\}\)$/\3\2\1/
개인적으로 나도 [0-9]
똑같이 할 것이다 .
.
s/\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{4\}\)$/\3\2\1/
평소와 같이 이를 수행하는 방법은 여러 가지가 있습니다.
답변2
$ sed -e 's/\(.\{15\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{4\}\)/\1\4\3\2/g' /tmp/test.txt
기대한 대로 되는 것 같습니다.
답변3
sed '/\(dateukfilename\)\(..\)\(..\)\(....\)/s//\1\4\3\2/'