sed를 사용하여 특수 문자 바꾸기

sed를 사용하여 특수 문자 바꾸기

쉘을 이용해서 특수문자를 바꿔야 해서 sed를 사용하는데 이해가 안되는 오류가 좀 있습니다.

<%_ by [@, ("_" = dash)
_%> by ]

처음 2개의 문자에 대해 내 구성은 다음과 같습니다. sed -i y/\<%\/\]\/ test.htm 작동하지만 여기서 대시 문자를 어떻게 추가합니까? 두 번째는 이렇게 되어야 하는데 sed -i y/\%>\/\]\/ 이런 오류가 발생했습니다 bash: /]/: is a folder . 도와주실 수 있나요?

답변1

무엇을 바꾸고 싶은지 잘 모르겠지만(첫 번째 경우에는 - 또는 _로) 이것은 나에게 잘 작동합니다.

$ echo "<%_" | sed 's/<%_/_/'
_
$ echo "<%_" | sed 's/<%_/-/'
-
$ echo "_%>" | sed 's/_%>/\]/'
]

정규식 식별자(/)를 이스케이프 처리하는 것 같습니다.

답변2

매개변수를 인용하고 s명령을 사용하여 문자열 교체를 수행해야 합니다. 이 -e옵션을 사용하여 여러 명령 표현식을 제공할 수 있습니다.

sed -i -e 's/<% /[@/' -e 's/ %>/]/' filename

관련 정보