ho ricevuto un file che ha una riga nel file in questo modo:Move (s) a seguire un'altra linea in un file
check=('78905905f5a4ed82160c327f3fd34cba')
Mi piacerebbe essere in grado di spostare questa linea per seguire un linea che assomiglia a questo:
files=('somefile.txt')
La matrice se a volte che possono estendersi più righe, per esempio:
files=('somefile.txt'
'file2.png'
'another.txt'
'andanother...')
text
in between
check=('78905905f5a4ed82160c327f3fd34cba'
'5277a9164001a4276837b59dade26af2'
'3f8b60b6fbb993c18442b62ea661aa6b')
La matrice/linea alway s finisce in a) e nessun testo in mezzo conterrà una parentesi chiusa.
ho ottenuto alcuni consigli che awk può fare questo:
awk '/files/{
f=0
print $0
for(i=1;i<=d;i++){ print a[i] }
g=0
delete a # remove array after found
next
}
/check/{ f=1; g=1 }
f{ a[++d]=$0 }
!g' file
Questo sarà solo estendersi su una linea però. Mi è stato detto di espandere la ricerca:
awk '/source/ && /\)$/{
f=0
print $0
for(i=1;i<=d;i++){ print a[i] }
g=0
delete a # remove array after found
next
}
/md5sum/ && /\)$/{ f=1; g=1 }
f{ a[++d]=$0 }
!g'
Imparare semplicemente awk, quindi gradirei l'aiuto con questo. O se c'è un altro strumento che può farlo, mi piacerebbe saperlo. Qualcuno mi ha detto che "ed" questo tipo di funzionalità.
Aha, necessità spostare le linee sia in alto che in basso, giusto? Ho rivisto la risposta qui sotto ... – DigitalRoss