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
2回定義され、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"
/>