다음과 같은 문자와 숫자가 포함된 문자열이 있습니다.
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