안드로이드 쉘에서 sed 사용

안드로이드 쉘에서 sed 사용

sed나는 안드로이드 터미널 에뮬레이션의 sed에 익숙해지고 있습니다. 루팅되지 않은 Sony 장치에 설치된 장난감 상자에 포함된 버전을 사용하고 있습니다 . sed --version(또는 toybox sed --version)은 동일한 결과를 제공합니다.

이것은 GNU sed 9.00이 아닙니다.

이제 나는 toybox sed에서 특정 매뉴얼을 읽고 몇 가지 간단한 단일 라이너를 시도했습니다(수동으로 실행할 수 있는 스크립트에 이를 포함시키는 것이 아이디어입니다). 이제 내가 가장 먼저 알아차린 것은 간단한 대괄호(예: sed -e 's/foo/bar/' 파일)에 스크립트를 포함하려고 하면 이것이 올바르게 해석되지 않는다는 것입니다.

명령은 이중 괄호를 사용하여 작동하지만 스크립트가 해석되는 방식에 문제가 있습니다(또는 제가 잘못하고 있는 것일 수도 있습니다). 예. 파일 안의 단어를 대체하려고 합니다. 파일은 "stringa di test" 문자열로, "stringa di prova"로 변환하려고 합니다. 결과적으로 문자열은 대체되지만 이전 문자열이 줄의 나머지 부분에 연결됩니다.

user:$ ls
 file.txt
 n.sh
 s.sh
 save
 script_gian.sh
 sed_script
user: $ cat file.txt
 stringa di test
user:$sed -i -e "s/test/prova/g" file.txt                        <
 ^C1|user:$ cat file.txt
stringa di test
user:$  sed -r -e "s/test/prova/1" file.txt > f.txt                <
user:$ ls
 f.txt
 file.txt
 file.txtFD4OVI
 n.sh
 s.sh
 save
 script_gian.sh
 sed_script
user:$ cat f.txt
stringa di provastringa di test
user:$ cat file.txt
 stringa di test
user: $

또 다른 흥미로운 점은 g 플래그(전역)를 사용하려고 하면 sed가 중단되고 Control C로 중단되어야 한다는 것입니다. -i 명령도 sed가 중단된다는 것입니다.

또한 다음을 사용하여 sed에 문자열을 파이프하려고 했습니다.

cat file.txt | sed -e "s/foo/bar/" > newfile.txt

그러나 결과는 똑같습니다. 문자열 안의 단어가 대체되고 대체 이전의 줄이 바로 뒤에 추가됩니다(이로 인해 줄의 나머지 문자도 삭제됩니다). 제가 잘못 사용하고 있는 건가요, 아니면 제가 사용하려는 sed버전에 뭔가가 있는 건가요 ? sed사용?

답변1

#toybox irc 채널 덕분에 문제가 실제로 toybox sed의 버그라는 것을 확인할 수 있었는데, 이 버그는 해결되었을 것으로 예상되었지만 Android M에는 여전히 오래된 버전의 toybox가 함께 제공됩니다. 다음은 문제가 논의되었던 장난감 상자 메일링 리스트(아쉽게도 제가 놓쳤던)에 대한 링크입니다:

http://lists.landley.net/pipermail/toybox-landley.net/2016-January/007897.html

http://lists.landley.net/pipermail/toybox-landley.net/2015-September/004415.html

안타깝지만 향후 Android 업데이트가 포함된 현재 버전의 toybox를 기다려야 합니다.

관련 정보