sed를 사용하여 문자 위치 변경

sed를 사용하여 문자 위치 변경

이 파일에는 다음이 포함됩니다.

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/'

관련 정보