anche un comando awk di una riga dovrebbe funzionare:
awk '{print "prefix" $0}' file
L'intero ciclo può essere sostituito da un singolo comando sed che opera sull'intero file:
sed -e 's/^/prefix/' $file
Per quanto riguarda il tuo errore originale:
./appendToFile.sh:riga 11:/bin/sed:elenco di argomenti troppo lungo
Il problema è con questa riga di codice:
sed -e 's/^/prefix/' $line
$line
in questo contesto è nome file quel sed sta correndo contro. Per correggere il tuo codice dovresti correggere questa riga come tale:
echo $line | sed -e 's/^/prefix/'
(Nota anche che il tuo codice originale non dovrebbe avere il < $file
alla fine.)
William Pursell affronta correttamente questo problema in entrambi i suoi suggerimenti.
Tuttavia, credo che tu abbia identificato correttamente che c'è un problema con il tuo file di testo originale. dos2unix
non risolverà questo problema, poiché elimina solo i ritorni a capo di Windows si attaccano alla fine delle righe. (Tuttavia, se stai tentando di leggere un file Linux in Windows, otterrai una riga gigantesca senza ritorni.)
Supponendo che non si tratti di un problema con i caratteri di fine riga nel file di testo, le risposte di William Pursell, Andy Lester o nullrevolution funzioneranno.
Una variante del while read...
suggerimento:
while read -r line; do echo "PREFIX " $line; done < $file
Questo potrebbe essere eseguito direttamente dalla shell (non c'è bisogno di un file batch/script):
while read -r line; do echo "kp" $line; done < stusers.txt
Un modo Perl per farlo sarebbe:
perl -p -e's/^/prefix' filename
o
perl -p -e'$_ = "prefix $_"' filename
In entrambi i casi, si legge da filename
e stampa le righe prefissate su STDOUT.
Se aggiungi un -i
flag, quindi Perl modificherà il file sul posto. Puoi anche specificare più nomi di file e Perl li farà magicamente tutti.