#1 20.11.2018 20:17:38

Andy@Arch
Mitglied

sed ändert letzte Zeile nicht

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

Beitrag geändert von Andy@Arch (20.11.2018 20:18:22)

Offline

#2 21.11.2018 08:26:34

T.M.
Mitglied

Re: sed ändert letzte Zeile nicht

Ich vermute, die $Zeilen_Nummer ist eins zu hoch, bei der letzten Zeile geht's dann schief, die gibt's nicht.

Offline

#3 23.11.2018 15:39:04

Andy@Arch
Mitglied

Re: sed ändert letzte Zeile nicht

T.M. schrieb:

Ich vermute, die $Zeilen_Nummer ist eins zu hoch, bei der letzten Zeile geht's dann schief, die gibt's nicht.

Nein daran liegt es nicht, sonst würde es vor der letzten Zeile auch nicht funktionieren

Offline

Schnellantwort auf dieses Thema

Schreibe deinen Beitrag und versende ihn
Deine Antwort

Fußzeile des Forums