2014-04-22 10 views
0

Je suis totalement nouveau sur l'écriture de script batch, occupé avec les tutoriels avec l'exemple ci-dessous, je peux apprendre une chose ou deux.J'ai vraiment besoin d'aide pour écrire un script batch pour insérer une ligne de texte au milieu du fichier texte existant.Script Batch pour manipuler un fichier texte existant

Par exemple donné le fichier myfile.txt avec le contenu:

a 
bcd 
efg 
hjiklmnop 
q 
rs 
t 
uvwxyz 

Le commandement ./put-in-middle.sh "=== === ===" myfile.txt devrait modifier le fichier:

a 
bcd 
efg 
hjiklmnop 
=== === === 
q 
rs 
t 
uvwxyz 

Répondre

0

En utilisant sed et en supposant même nombre de lignes:

sed $(($(wc input -l | cut -d' ' -f1)/2))'a=== === ===' input 

Et ce i s la version du script put-in-middle.sh:

line=$1 
file=$2 
sed $(($(wc $file -l | cut -d' ' -f1)/2))"a$line" $file 
1
@echo off 

rem Count the number of lines in the file with FIND 
for /F %%a in ('find /C /V "" ^< %2') do set numLines=%%a 

rem Get the number of middle line 
set /A middle=numLines/2 

rem Process all lines, use FINDSTR /N to insert line numbers 
for /F "tokens=1* delims=:" %%a in ('findstr /N "^" %2') do (
    rem Echo the original line 
    echo/%%b 
    rem If the line is the middle one... 
    if %%a equ %middle% (
     rem Insert the new line 
     echo %~1 
    ) 
) 

Créer un fichier précédent batch comme put-in-middle.bat et exécuter ainsi:

put-in-middle "=== === ===" myfile.txt 

Notes:

  • Programme précédent ne vérifie pas les erreurs , comme les paramètres manquants. Cette vérification peut être ajoutée, si vous le souhaitez.
  • La barre oblique dans la commande echo/%%b est insérée pour éviter que le message "ECHO est activé" si la ligne est vide. Si la ligne peut contenir la chaîne "/?", Alors la commande doit être changée en echo(%%b pour éviter que l'aide d'écho soit affichée dans ce cas (les parenthèses de gauche sont le seul caractère qui le fait).
  • Si le fichier contient des caractères spéciaux par lot, par exemple < > | &), la commande echo/%%b échoue. Dans ce cas, un traitement spécial des lignes de fichiers doit être ajouté. Le même point s'applique à la nouvelle ligne insérée.
  • Le programme précédent affiche simplement à l'écran le nouveau fichier. Si vous souhaitez remplacer le fichier d'origine, la sortie doit être redirigée vers un fichier auxiliaire et remplacer celui d'origine à la fin:

.

(for /F "tokens=1* delims=:" %%a in ('findstr /N "^" %2') do (
    . . . 
)) > auxiliar.txt 
move /Y auxiliar.txt %2 
Questions connexes