![bash의 HTML 페이지에서 특수 16진수 문자를 변환하는 방법은 무엇입니까? [복사]](https://linux55.com/image/74204/bash%EC%9D%98%20HTML%20%ED%8E%98%EC%9D%B4%EC%A7%80%EC%97%90%EC%84%9C%20%ED%8A%B9%EC%88%98%2016%EC%A7%84%EC%88%98%20%EB%AC%B8%EC%9E%90%EB%A5%BC%20%EB%B3%80%ED%99%98%ED%95%98%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%20%5B%EB%B3%B5%EC%82%AC%5D.png)
웹 페이지의 일부 정보를 처리하는 스크립트가 있습니다. 페이지 인코딩으로 인해 일부 특수 문자가 16진수로 인코딩된 것 같습니다. 예를 들어, "/"로 번역되어야 하는 문자열 "%2f"가 있습니다.
bash에서 이러한 16진수 특수 문자를 ASCII로 어떻게 변환합니까? 어떤 아이디어가 있나요?
답변1
printf
Bash에는 C에서 배운 것과 거의 동일한 내장 기능이 있습니다 . 구문이 약간 다릅니다.
printf '\x2f'
더 높은 수준의 데이터 일관성 문제에 대해 걱정할 필요가 없다면 다음 함수를 통해 간단히 URL을 변환할 수 있습니다.
function deUrl() {
printf "${1//%/\\x}"
}
%
(모든 것을 a로 변환 \x
한 다음 printf로 인쇄합니다.)
답변2
이러한 엔터티는 다음 Python one-liner를 사용하여 디코딩할 수 있습니다.
$ python -c "import urllib, sys; print urllib.unquote(sys.argv[1])" "%2f"
/
코드는 단일 문자로 제한되지 않습니다. 더 복잡한 문자열을 허용합니다.
$ python -c "import urllib, sys; print urllib.unquote(sys.argv[1])" "%2d and %2f"
- and /
Python의 urllib.unquote
문서화됨여기.