문자열에서 특정 문자 다음에 쿼리하고 바꾸는 방법은 무엇입니까?

문자열에서 특정 문자 다음에 쿼리하고 바꾸는 방법은 무엇입니까?

? 다음 문장에서 all 을 /only 로 바꾸는 방법은 무엇입니까?.=

예를 들어 다음과 같습니다.

/buttress_unit/buttress_top/buttress_i_ps_but_cio_m1_i_but_m1_tx_wrapper_m1_pref_fifo_array_29__stream_id_3_0 = buttress_unit/buttress_top/buttress/i_ps_but_cio_m1/

나는 이것을하고 싶다 :

/buttress_unit/buttress_top/buttress_i_ps_but_cio_m1_i_but_m1_tx_wrapper_m1_pref_fifo_array_29__stream_id_3_0 = buttress_unit.buttress_top.buttress.i_ps_but_cio_m1.

답변1

당신은 시도 할 수 있습니다

sed ':label
  s|\(=.*\)/|\1.|
  t label
'

교체는 로 끝나는 모든 항목을 s찾습니다 . 대괄호로 묶인 캡처는 마지막 . 교체 문자열을 제외하고 캡처된 내용을 복사하고 점을 추가합니다. 그러나 sed는 이미 일치하는 문자를 두 번 찾지 않기 때문에 전역적으로 이 작업을 수행하기 위해 a를 추가할 수는 없습니다 . 따라서 조건이 있는 루프를 추가합니다.=//g가다(무한 루프를 피하기 위해). 이전 명령으로 행이 변경된 경우 t레이블로 이동함을 나타냅니다.label

관련 정보