안드로이드 쉘에서 sed 사용하기

안드로이드 쉘에서 sed 사용하기

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

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

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

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

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가 함께 제공됩니다. 다음은 문제가 논의된 Toy Box 메일링 리스트(슬프게도 놓쳤습니다)에 대한 링크입니다.

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 업데이트를 기다려야 합니다.

관련 정보