sed를 사용하여 다양한 숫자 시퀀스를 그대로 유지하면서 문자열의 문자 바꾸기

sed를 사용하여 다양한 숫자 시퀀스를 그대로 유지하면서 문자열의 문자 바꾸기

다음과 같은 문자와 숫자가 포함된 문자열이 있습니다.

one0.1231two,

나는 바꾸고 싶다하나그리고새로운 문자 순서로

three0.1231four,

그 사이의 숫자는 변경되지 않고 유지됩니다. 그러나 두 하위 문자열이하나그리고항상 동일하게 유지되지만 그 사이의 숫자 시퀀스 길이는 다양할 수 있습니다.

one0.000230002two, one1293.02two, or one42two 

일어날 수 있습니다. 지금까지는 sed와 정규식을 사용하여 고정된 비트 수로만 교체를 수행할 수 있었습니다.

다음과 같은 상황만 발생합니다하나그리고위와 같이 주변의 숫자를 교체해야 합니다. 다른 모든 이벤트는 변경되지 않은 상태로 유지되어야 합니다.

답변1

다음을 수행할 수 있습니다.

sed 's/one\([[:digit:].]*\)two/three\1four/g'

이것\(...\) 포착\1(여기서는 0개 이상의 십진수 또는 마침표 시퀀스) 내에서 일치하므로 대체 항목에서 참조할 수 있습니다.

답변2

다음 sed대체품을 사용하는 것이 좋습니다.

$ s="one0.000230002two, one1293.02two, or one42two "
$ sed -E 's/([^ 0-9]+)([0-9]+(\.[0-9]+)?)([^ 0-9,]+)/three\2four/g' <<<"$s"
three0.000230002four, three1293.02four, or three42four

관련 정보