es wäre besser, zu gehen mit einem XML
Parser jedoch bash
kann dies tun, falls th e xml
Datei ist einfach. Keine schöne Lösung, aber es kann den Trick leisten.
#!/bin/bash
infile="$1"
name="$2"
while IFS='' read -r line || [[ -n "$line" ]]; do
case $line in
*students_names*)
case $line in
*"$name"\;*|*"$name"\"*) echo "$line" ;;
*) echo "${line//Value=\"/Value=\"$name;}" ;;
esac ;;
*) echo "$line" ;;
esac
done < "$infile"
Das Skript liest und analysiert die Eingabe example.xml
Datei Zeile für Zeile. Es wendet eine variable Erweiterung an, um der Zielzeile zu entsprechen (die Key="students_names"
enthält) und zu entscheiden, ob sie $name
enthält. Wenn es keine Übereinstimmung mit $name
gibt, fügen Sie es hinzu, andernfalls drucken Sie die Zeile.
Beispiel 1:
./add_value.sh example.xml Todd
Output:
<Configuration_item Key="foo" Value="bar"/>
<Configuration_item Key="students_names" Value="Todd;Marry;Alen;Donald"/>
<Configuration_item Key="foo2" Value="baz/>
Beispiel 2:
./add_value.sh example.xml Toddy
Ausgang:
<Configuration_item Key="foo" Value="bar"/>
<Configuration_item Key="students_names" Value="Toddy;Todd;Marry;Alen;Donald"/>
<Configuration_item Key="foo2" Value="baz/>
einen XML-Parser verwenden – anubhava
Das zuviel des Guten für dieses – user648026