Kann mir mal jemand sagen warum sed mit dem folgenden Aufruf nicht die letzte Zeile in der Datei ändert?
sed -i -e "$Zeilen_Nummer{N;s#test.$Zeilen_Inhalt#Drei_Null#}
habe hier ein kleines Testscript geschrieben um das Problem zu verdeutlichen
#!/bin/bash
#testfile wird generiert
echo "test.0" > /tmp/testfile
for ((k=1; k<401; k++)); do
echo "test.$k" >> /tmp/testfile
done
for ((k=400; k>0; k--)); do
echo "test.$k" >> /tmp/testfile
done
read -p "Enter zum konvertieren"
#Nummern werden umgewandelt
while [ $(grep -c "test." /tmp/testfile ) -gt 0 ]; do
Zeilen_Inhalt=$(grep -m 1 "test." /tmp/testfile |cut -d. -f2)
Zeilen_Nummer=$(grep -m 1 -n "test." /tmp/testfile |cut -d: -f1)
echo $Zeilen_Nummer $Zeilen_Inhalt
if [ "$Zeilen_Inhalt" -ge 0 ] && [ "$Zeilen_Inhalt" -le 011 ];then
sed -i -e "$Zeilen_Nummer{N;s#test.$Zeilen_Inhalt#Drei_Null#}" /tmp/testfile
elif [ "$Zeilen_Inhalt" -ge 012 ] && [ "$Zeilen_Inhalt" -le 033 ];then
sed -i -e "$Zeilen_Nummer{N;s#test.$Zeilen_Inhalt#Drei_Drei_Zwei_Null#}" /tmp/testfile
elif [ "$Zeilen_Inhalt" -ge 034 ] && [ "$Zeilen_Inhalt" -le 056 ];then
sed -i -e "$Zeilen_Nummer{N;s#test.$Zeilen_Inhalt#Drei_Zwei_Null#}" /tmp/testfile
elif [ "$Zeilen_Inhalt" -ge 057 ] && [ "$Zeilen_Inhalt" -le 078 ];then
sed -i -e "$Zeilen_Nummer{N;s#test.$Zeilen_Inhalt#Zwei_Drei_Zwei_Null#}" /tmp/testfile
elif [ "$Zeilen_Inhalt" -ge 079 ] && [ "$Zeilen_Inhalt" -le 101 ];then
sed -i -e "$Zeilen_Nummer{N;s#test.$Zeilen_Inhalt#Zwei_Null#}" /tmp/testfile
elif [ "$Zeilen_Inhalt" -ge 102 ] && [ "$Zeilen_Inhalt" -le 123 ];then
sed -i -e "$Zeilen_Nummer{N;s#test.$Zeilen_Inhalt#Zwei_Eins_Zwei_#}" /tmp/testfile
elif [ "$Zeilen_Inhalt" -ge 124 ] && [ "$Zeilen_Inhalt" -le 146 ];then
sed -i -e "$Zeilen_Nummer{N;s#test.$Zeilen_Inhalt#Eins_Zwei_Null#}" /tmp/testfile
elif [ "$Zeilen_Inhalt" -ge 147 ] && [ "$Zeilen_Inhalt" -le 168 ];then
sed -i -e "$Zeilen_Nummer{N;s#test.$Zeilen_Inhalt#Eins_Eins_Zwei_Null#}" /tmp/testfile
elif [ "$Zeilen_Inhalt" -ge 169 ] && [ "$Zeilen_Inhalt" -le 191 ];then
sed -i -e "$Zeilen_Nummer{N;s#test.$Zeilen_Inhalt#Eins_Null#}" /tmp/testfile
elif [ "$Zeilen_Inhalt" -ge 192 ] && [ "$Zeilen_Inhalt" -le 213 ];then
sed -i -e "$Zeilen_Nummer{N;s#test.$Zeilen_Inhalt#Eins_Eins_Vier_Null#}" /tmp/testfile
elif [ "$Zeilen_Inhalt" -ge 214 ] && [ "$Zeilen_Inhalt" -le 236 ];then
sed -i -e "$Zeilen_Nummer{N;s#test.$Zeilen_Inhalt#Eins_Vier_Null#}" /tmp/testfile
elif [ "$Zeilen_Inhalt" -ge 237 ] && [ "$Zeilen_Inhalt" -le 258 ];then
sed -i -e "$Zeilen_Nummer{N;s#test.$Zeilen_Inhalt#Vier_Eins_Vier_Null#}" /tmp/testfile
elif [ "$Zeilen_Inhalt" -ge 259 ] && [ "$Zeilen_Inhalt" -le 281 ];then
sed -i -e "$Zeilen_Nummer{N;s#test.$Zeilen_Inhalt#Vier_Null#}" /tmp/testfile
elif [ "$Zeilen_Inhalt" -ge 282 ] && [ "$Zeilen_Inhalt" -le 303 ];then
sed -i -e "$Zeilen_Nummer{N;s#test.$Zeilen_Inhalt#Vier_Drei_Vier_Null#}" /tmp/testfile
elif [ "$Zeilen_Inhalt" -ge 304 ] && [ "$Zeilen_Inhalt" -le 326 ];then
sed -i -e "$Zeilen_Nummer{N;s#test.$Zeilen_Inhalt#Drei_Vier_Null#}" /tmp/testfile
elif [ "$Zeilen_Inhalt" -ge 327 ] && [ "$Zeilen_Inhalt" -le 348 ];then
sed -i -e "$Zeilen_Nummer{N;s#test.$Zeilen_Inhalt#Drei_Drei_Vier_Null#}" /tmp/testfile
elif [ "$Zeilen_Inhalt" -ge 349 ] && [ "$Zeilen_Inhalt" -le 360 ];then
sed -i -e "$Zeilen_Nummer{N;s#test.$Zeilen_Inhalt#Drei_Null#}" /tmp/testfile
elif [ "$Zeilen_Inhalt" -ge 361 ];then
Korrektierter_Inhalt=$(echo "test."$(( $Zeilen_Inhalt - 360 )))
sed -i -e "$Zeilen_Nummer{N;s#test.$Zeilen_Inhalt#$Korrektierter_Inhalt#}" /tmp/testfile
fi
done