리눅스2023. 8. 7. 10:05

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/612728 (2018.3.19)

리눅스 터미널창에서 문자열 또는 파일의 내용에 대해서 URL인코딩/디코딩을 하려다가 인터넷에서 찾은 요긴한 방법이다.

파이썬(python)의 URL인코딩/디코딩 기능을 이용하는 것인데, alias로 지정해 두면 터미널창에서 아주 편리하게 활용할 수 있다.

우선 문자열을 인자로 받아서 URL디코딩을 위한 파이썬 코드는 아래와 같이 작성할 수 있다. python 버전2 기준이다.

import sys,urllib as u1;
print u1.unquote_plus(sys.argv[1]);

위의 코드를 파이썬을 실행할 때 -c 옵션으로 지정해 주는 방식으로 아래와 같이 alias를 만들 수 있다.

# URL디코딩 alias 설정
alias urldecode='python -c "import sys,urllib as u1; print u1.unquote_plus(sys.argv[1])"'

# 문자열 디코딩
urldecode "%EB%B0%98%EB%8B%AC%EA%B0%80%EB%A9%B4"
반달가면

마찬가지로 URL인코딩에 대한 alias도 만들 수 있다. 디코딩에서 unquote_plus(), 인코딩에서 quote_plus()임에 유의.

# URL인코딩 alias 설정
alias urlencode='python -c "import sys,urllib as u1; print u1.quote_plus(sys.argv[1])"'

# 문자열 인코딩
urlencode "반달가면"
%EB%B0%98%EB%8B%AC%EA%B0%80%EB%A9%B4

파일의 내용에 대한 URL인코딩/디코딩을 하려면 I/O스트림에 대해 작업이 되어야 한다. 이 경우에는 표준입력으로 받은 내용을 for 반복문으로 한줄씩 처리하여 출력하는 형태가 된다. 아래와 같이 alias를 정의해서 활용 가능.

# URL디코딩(I/O스트림 버전)
alias urldecode_stream='python -c "import sys, urllib as u1; [sys.stdout.write(u1.unquote_plus(l)) for l in sys.stdin]"'

# 파일 내용에 대한 적용
cat my_file.txt | urldecode_stream

# URL디코딩 결과를 다른 파일에 저장
cat my_file.txt | urldecode_stream > my_file.urldecoded.txt

# URL인코딩(I/O스트림 버전)
alias urlencode_stream='python -c "import sys, urllib as u1; [sys.stdout.write(u1.quote_plus(l)) for l in sys.stdin]"'

# 파일 내용에 대한 적용
cat my_file.urlencoded.txt | urlencode_stream

만약 python 버전 3에서 사용하려면 import 명령에서 urllib 대신 urllib.parse를 쓰면 된다. 나머지 부분은 동일하다.

728x90
Posted by 반달가면