![문자열에서 특정 문자 다음에 쿼리하고 바꾸는 방법은 무엇입니까?](https://linux55.com/image/72318/%EB%AC%B8%EC%9E%90%EC%97%B4%EC%97%90%EC%84%9C%20%ED%8A%B9%EC%A0%95%20%EB%AC%B8%EC%9E%90%20%EB%8B%A4%EC%9D%8C%EC%97%90%20%EC%BF%BC%EB%A6%AC%ED%95%98%EA%B3%A0%20%EB%B0%94%EA%BE%B8%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
? 다음 문장에서 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