검색하고 sed 특수 문자로 바꾸기

검색하고 sed 특수 문자로 바꾸기

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를 편집했기 때문에 xmlstarletARM 64 Android용 바이너리가 존재하는지 조차 알 수 없습니다 .

관련 정보