jednořádkový příkaz awk by také měl stačit:
awk '{print "prefix" $0}' file
Celou smyčku lze nahradit jediným příkazem sed, který pracuje s celým souborem:
sed -e 's/^/prefix/' $file
Ohledně vaší původní chyby:
./appendToFile.sh:řádek 11:/bin/sed:Seznam argumentů je příliš dlouhý
Problém je s tímto řádkem kódu:
sed -e 's/^/prefix/' $line
$line
v tomto kontextu je název souboru že sed běží proti. Pro opravu kódu byste měli opravit tento řádek jako takový:
echo $line | sed -e 's/^/prefix/'
(Všimněte si také, že váš původní kód by neměl mít < $file
na konci.)
William Pursell řeší tento problém správně v obou svých návrzích.
Domnívám se však, že jste správně určili, že došlo k problému s vaším původním textovým souborem. dos2unix
tento problém nevyřeší, protože pouze odřízne čáry pro návrat vozíku Windows na konci řádků. (Pokud se však pokoušíte číst soubor Linuxu ve Windows, dostanete mamutí řádek bez návratu.)
Za předpokladu, že se nejedná o problém se znaky konce řádku ve vašem textovém souboru, budou fungovat odpovědi Williama Pursella, Andyho Lestera nebo nullrevolution.
Varianta na while read...
návrh:
while read -r line; do echo "PREFIX " $line; done < $file
To lze spustit přímo z shellu (není potřeba dávkového / skriptového souboru):
while read -r line; do echo "kp" $line; done < stusers.txt
Perlský způsob, jak to udělat, by byl:
perl -p -e's/^/prefix' filename
nebo
perl -p -e'$_ = "prefix $_"' filename
V obou případech se to čte z filename
a vytiskne řádky s předponou jako STDOUT.
Pokud přidáte -i
flag, pak Perl upraví soubor na místě. Můžete také zadat více názvů souborů a Perl je magicky udělá všechny.