2009-07-10 5 views
1

Je dois insérer une chaîne dans le fichier texte, par exemple, avant la première ligne à la fin.Façon simple d'insérer une ligne à une position particulière dans le fichier

STRINGS=`wc -l $OLDFILE \ 
    | awk '{print $1-1}' \ 
    | sed "s/$DOLLAR/+/g" \ 
    | tr -d \\\n \ 
    | sed "s/+$DOLLAR//" \ 
    | bc` 
ADDFILE=$3 
head -n $STRINGS $OLDFILE > $NEWFILE 
cat $ADDFILE >> $NEWFILE 
tail -n 1 $OLDFILE >> $NEWFILE 

Pouvez-vous suggérer un moyen simple d'effectuer cela? Merci

+1

Je pense que vous voulez dire "particulier" (ou peut-être "arbitraire"). "Aléatoire" signifie autre chose. –

+0

oui, vous avez raison – taro

+3

Bien que, pour être juste, Random Access Memory? – Skilldrick

Répondre

1
awk 'f==1{print last}{last=$0;f=1}END{print "NEW WORD\n"$0}' file 
+0

Merci, ça aide – taro

1

Peut-être un peu plus simple:

(tail -1 "$OLDFILE"; echo "hello there"; tac "$OLDFILE" | tail -n +2) | tac > "$NEWFILE" 
1

Une autre solution (pure bash):

prev= 
print= 
IFS= 
while read -r line; do 
    if [ "$print" ]; then 
     echo "$prev" 
    fi 
    print=1 
    prev="$line" 
done < "$OLDFILE" 
echo "hello there" 
echo "$prev" 
+0

Ceci est fondamentalement le même que le script awk ci-dessus, mais dans bash. –

+0

Cela ne fonctionne pas. Il supprime beaucoup d'espace blanc et les barres obliques inverses à partir du fichier d'entrée. – Jens

+0

Je l'ai corrigé, merci d'avoir remarqué le bug. –

1

Le plus simple:

head -n -1 "$OLDFILE" 
echo "hello there" 
tail -1 "$OLDFILE" 
+0

Dans ma tête de système ne supporte pas le décalage négatif :(, donc je dois le calculer moi-même – taro

+0

ok, puis voir mes deux autres solutions (que j'ai supprimé après avoir publié celui-ci, mais rétabli maintenant). –

0

Le plus simple celui que je pouvais penser à

sed -i "$ i Text to add" file.txt 
Questions connexes