sed를 사용하여 검색하고 교체해야 합니다. 예를 들어 다음 샘플 텍스트로 시작하세요.
<TextView
android:textSize="20.0sp"
android:textStyle="bold"
android:textColor="@android:color/white"
android:layout_gravity="center"
android:textColor="@android:color/white"
android:textColor="@android:color/white"
다음 항목 을 모두 교체하고 싶습니다 .android:textColor="#ffff5d"
3시간 넘게(네, 너무 답답하네요) 성공하지 못했는데 가까워질수록
sed -i "s/"$android:textColor=\"@android:color/white\""\|"$android:textColor=\"#ff4000\""/g" path to file.xml
그러나 이것은 잘못된 것입니다. 밝혀지다
androidwhite"|:textColor="#ff4000"/white"
내가 뭘 잘못했나요?
답변1
XML 파일을 편집 하는 것은 sed
결코 좋은 생각이 아닙니다 . XML 파일의 형식이 약간 다른 경우 접근 방식이 실패합니다.
적절한 XML이 있는 경우(어차피 필요하다고 생각함) xmlstarlet
.
올바른 것은 xml
최소한 다음을 의미합니다.
android
어딘가에 선언된 네임스페이스- 태그
TextView
닫기(예: 사용/>
) - 각 태그의 속성은 한 번만 존재합니다(귀하의 예에서는
android:textColor
두 번 정의되어 XML이 유효하지 않게 됩니다).
XML 문서의 완전한 예를 제공하지 않았으므로 다음과 같이 작동하는 최소한으로 설정하겠습니다.
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:textSize="20.0sp"
android:textStyle="bold"
android:textColor="@android:color/white"
android:layout_gravity="center"
/>
이제 다음을 사용할 수 있습니다 xmlstarlet
.
xmlstarlet ed -P -S \
-N android="http://schemas.android.com/apk/res/android" \
-u "//TextView/@android:textColor" \
-v "#ffff5d" \
file.xml
산출:
<?xml version="1.0"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:textSize="20.0sp"
android:textStyle="bold"
android:textColor="#ffff5d"
android:layout_gravity="center"
/>
답변2
나의 제한된 사용을 위해
sed 's|android:textColor="@android:color/white"|android:textColor="#ffff5d"|g'
잘 작동합니다. 방금 휴대폰에서 일부 APK를 편집했기 때문에 xmlstarlet
ARM 64 Android용 바이너리가 존재하는지 조차 알 수 없습니다 .