Come inserire una linea tra due linee che corrispondono a un determinato pattern in Notepad ++


1

Questo è il mio file di testo

echo Move date ahead 18 days to 30-09-2016
date 30-09-2016
echo Basic Rule Backups
echo Move date ahead 1 day to 1-10-2016
date 1-10-2016
echo date ahead 1 day to 2-10-2016
date 2-10-2016

Usando Notepad ++ o anche Notepad, è comunque possibile aggiungere una riga aggiuntiva "pause" solo se la riga successiva è un comando "date".
Essenzialmente questo dovrebbe essere l'output dopo la sostituzione.

echo Move date ahead 18 days to 30-09-2016
pause
date 30-09-2016
echo Basic Rules 
echo Move date ahead 1 day to 1-10-2016
pause
date 1-10-2016
echo date ahead 1 day to 2-10-2016
pause
date 2-10-2016

Se riesco a un'espressione regolare generale che possa aiutarmi in tutte queste sostituzioni, lo apprezzerei molto


Ho poche conoscenze sugli script batch o sul blocco note ++. Ti aiuterebbe a vedere come la stessa cosa potrebbe essere realizzata in bash, magari per basare il tuo script batch su di esso? Prima chiedo di non aggiungere risposte inutili alla tua domanda.
TheCommoner282

Certo che ti aiuterà
Dhiwakar Ravikumar

Risposte:


1

Come inserisco una linea prima di un'altra linea che corrisponde a un modello?

  • Menu "Cerca" & gt; "Sostituisci" (o Ctrl + H )

  • Imposta "Trova cosa" su ^(date.*)$

  • Imposta "Sostituisci con" a pause\r\n\1

  • Abilita "Espressione regolare"

  • Fai clic su "Sostituisci tutto"

enter image description here

Gli appunti:

  • Quanto sopra presuppone che stai modificando un file di testo con Windows EOL, \r\n.

  • Se utilizzi file con EOL diversi, puoi convertirli in EOL di Windows utilizzando il menu "Modifica" & gt; "Conversione EOL".

  • Se non si sta lavorando con Windows EOL e non si desidera convertirli, utilizzare invece quanto segue:

    • Uso \n invece di \r\n per EOL Unix / OS X.

    • Uso \r invece di \r\n per EOL Mac OS (fino alla versione 9)


Ulteriori letture


1

Come discusso nei commenti della domanda, ecco lo script di bash che soddisferebbe questo scopo. Saluti

#!/bin/bash
### set input and output file names
input=test.txt
output=pause.txt

## run the script
while read foo; do echo $foo >> $output
   if [ "$(echo $foo | grep date)" != "" ]
      then echo "pause" >> $output
   fi
done < $input


### EXPLANATION
### The while loop runs until the input runs out of lines
### It takes one line and echo it out in a new file
### It makes an if check. It takes the line and checks if there is the 
### word 'date' in it. If yes, then the whole line will be the output,
### if no, it will be empty
### The if check checks if it is empty. If it is not empty
### (,hence date was present), it adds an additional line 
### saying 'pause' into the new file
### you will end up with two files. One with, one without pause.

MODIFICA 1:

Come ha sottolineato David Postill, ho frainteso la richiesta. Ma echeggiare la pausa prima di scrivere la riga e aggiungere un ulteriore controllo inverso per echo (rimane vuoto quando viene trovato l'eco) dovrebbe fare il lavoro. Grazie David!

 #!/bin/bash
### set input and output file names
input=test.txt
output=pause.txt

## run the script
while read foo; do
   if [ "$(echo $foo | grep date | grep -v echo)" != "" ]
      then echo "pause" >> $output
   fi
    echo $foo >> $output
done < $input

Hai provato questo? Non penso che corrisponderà all'output richiesto dall'OP - aggiungerà anche pause dopo le righe contenenti echo date ... che non è quello che è stato chiesto.
DavidPostill

hai ragione, ho frainteso l'OP in due punti. Ho pensato che la pausa dovrebbe essere aggiunta dopo qualsiasi data e anche dopo la data effettiva. Bene, è una specie di soluzione facile. Dammi un momento
TheCommoner282

Non è ancora corretto: / l'ultima riga date 2-10-2016 non è elaborato e manca da pause.txt. L'ultima riga dovrebbe anche avere una pausa prima di ...
DavidPostill

Hmm .. Ho appena controllato la mia parte e la stampa correttamente. Questo è ciò che emette echo Move date ahead 18 days to 30-09-2016 pause date 30-09-2016 echo Basic Rule Backups echo Move date ahead 1 day to 1-10-2016 pause date 1-10-2016 echo date ahead 1 day to 2-10-2016 pause date 2-10-2016 Cattivo da leggere nei commenti, ma come vedi, ha aggiunto un pause nella penultima riga
TheCommoner282

Ecco la mia uscita imgur.com/4XX70gM
DavidPostill
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.