긴 sed 문자열에서 특수 문자를 이스케이프 처리하는 방법

긴 sed 문자열에서 특수 문자를 이스케이프 처리하는 방법

sed를 사용하여 파일의 115번째 줄에 이 문자열을 포함시키고 싶습니다. 그러나 항상 알 수 없는 명령에 대해 불평합니다. 다른 질문에서 다른 해결 방법을 따랐지만 아직 해결하지 못했습니다.

sed '115"<"img src="\.\/index_files\/Logo\.png" width="200" height="160" align="right" border="0">"' index.html > test.html

감사해요!

답변1

명령이 "아니기 때문이다 . sed오류 메시지에서 알 수 있듯이 명확하지는 않습니다.

주소 115다음에는 명령이 와야 합니다 sed.i

  • 그런 다음 일부를 제거하십시오 ". 그 주위 <와 그 이후>
  • 그런 다음 s를 탈출하지 마십시오 /. 탈출할 필요가 없습니다.
  • i그런 다음 명령은 텍스트만 허용하므로 아무것도 이스케이프하지 마십시오 .

이로 인해 우리는 다음과 같은 결과를 얻게 됩니다.sed '115 i <img src="./index_files/Logo.png" width="200" height="160" align="right" border="0">'

답변2

사용자 richard는 명령의 문제점을 잘 설명하고 sed수행하려는 작업을 수행하는 데 필요한 올바른 편집 스크립트도 제공합니다.

저는 다양한 상황에서 작동하는 대안을 제공했습니다.

sed명령은 r데이터 스트림의 현재 위치에 파일 내용을 삽입합니다.

당신의 sed명령줄할 수 있다이렇게 적혀있다

$ sed '115r /dev/stdin' index.html <data.in

sed '115r data.in' index.html이는 115행 뒤에 삽입된 데이터를 파일에 저장하려는 경우 data.in와 동일한 효과를 갖습니다 .

/dev/stdin표준 입력을 통해 전송된 모든 내용을 포함하는 특수 파일입니다.

다음과 같이 할 수도 있습니다("here-strings"를 지원하는 셸 사용).

$ sed '115r /dev/stdin' index.html <<<"my string of stuff"

또는

$ sed '115r /dev/stdin' index.html <<<"$myvariableofwonder"

분명히 이것은 다른 명령의 파이프에서도 예상대로 작동합니다.

$ sed -n '1,10p' myfile | sed '115r /dev/stdin' index.html

이렇게 하면 1~10행이 115행 myfile으로 이동됩니다 index.html.

관련 정보