Configuració d'exemples sed
Aquí teniu una guia ràpida per configurar l'exemple, que intentaré que no exageri massa.
paraulesés un fitxer de text que conté els números de l'1 al 100. Si no esteu segur de l'ordre per crear-lo, consulteu la funció Exportar xargs a l'ordre d'exportació de Bash. Mai se sap que pot ser a la propera entrevista de guió de shell.
barraés un fitxer de text que conté una sola línia -.
vell-phpés un fitxer de text que conté línies de PHP antic que es trencaran en php7 o posterior. (Consell: ereg)
Tingueu en compte que totes les funcions descrites anteriorment es poden trobar a continuació a la nota final sobre funcions per configurar.
Exemples Sed amb ordres equivalents
En un entorn de línia d'ordres, trobareu que hi ha més d'una solució a una tasca determinada. Tanmateix, en la seva major part, voleu seguir el camí que menys resistència genera. A continuació es mostra una llista d’exemples d’ordres sed amb les ordres equivalents corresponents, on algunes es detallaran a continuació.
1. Imprimiu una línia aleatòria (equivalent a ordena -R - | cap -1)
sed -n '$ ((RANDOM% 100)) p '-2. Imprimiu l'última línia del fitxer (equivalent al cap -1 -)
sed -n '$ p'-3. Imprimiu les primeres 10 línies d'un fitxer (equivalent al cap -n 10 -)
sed '10q'-4. Imprimiu la primera línia d'un fitxer (equivalent a la cua -1 -)
sed -n '1p'-5. Suprimiu totes les instàncies d’un caràcter (equivalent a tr –elimina ‘0’ -, on 0 és el caràcter que volem suprimir)
sed -I 's / 0 // g'-6. Converteix el fitxer CSV a tsv (equivalent a tr ',' ' t' -)
sed -I 's /, / t / g'-7. Afegiu una línia al fitxer (equivalent a la barra de gats -)
sed '$ A ---'-8. Prepara la línia al fitxer (equivalent a cat-bar)
sed '1i ---'-9. Imprimiu totes les línies del fitxer (equivalent a cat -)
sed -n -I 'p'-10. Imprimiu una línia que coincideixi amb un patró (equivalent a grep -e '^ 1' -)
sed -n -I '/ ^ 1 / p'-11. Suprimiu les línies que coincideixin amb un patró (equivalent a grep -v -e '^ 1' -)
sed -I '/ ^ 1 / d'-12. Obteniu el nombre de línies d'un fitxer (equivalent a wc -l -)
sed -n -I '$ ='-13. Escriviu a un fitxer en segon pla (te de comandament equivalent)
sed 'dins$ {1}'-Exemple d'ús de sed per implementar l'ordre tee
Just a sobre, hi ha un exemple amb el nom Escriu en un fitxer al fons. Una mena de sons com l’ordre tee. Bé, és així. Aquí ampliarem com implementar una funció per substituir el tee a bash mitjançant sed.
Ordres
tee (){
prova $ {#} -eq 1 || tornar;
sed 'dins$ {1}'-
}
principal()
teeaixò;
gataixò
principal
Sortida
12
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
Aquí veureu dos llistats dels enters de l'1 al 10. El primer és de l'ordre seq. El segon que obtenim del gat de la fitxa escrit en tee. Sé que és ridícul, però funciona!
Exemple d'ús de sed per imprimir una línia aleatòria en un fitxer
Suposem que volem imprimir una línia aleatòria en un fitxer amb bash i una mica de sed. Ho podem fer? Si podem! Així és com.
Implementar una funció que
- Obté el nombre de línies d'un fitxer, L
- Genera un nombre aleatori entre 1 i L, R
- Imprimeix R
La funció espera que l’entrada es canalitzi des de l’exterior.
Ordres
alguna línia(){
funciólc()
{
sed -n -I '$ ='-
};
funciólínia d'impressió()
{
sed -n -I '$ {1}p '-
};
temp= $( mktemp );
gat-> $ {temp};
gat $ {temp} |línia d'impressió $((RANDOM%$( gat $ {temp} |lc)+1 ));
rm $ {temp}
}
Exemple d'ús (1)
seq 100 |_Sortida (1)
35Exemple d'ús (2)
arrissar https://linuxhint.com/bash_cut_command/ --silenciat |strip-tags|alguna líniaVegeu l'exemple següent, amb sed per despullar etiquetes HTML. Tingueu en compte que l'exemple sobre de vegades torna en blanc per a les línies buides. Com a exercici, es pot millorar.
Mitjançant sed per imprimir línies en un fitxer
Suposem que voleu implementar una funció en bash per imprimir una línia determinada en un fitxer. Intentar imprimir una sola línia en un fitxer mitjançant un bucle en bash, head, tail o awk és massa feina per imprimir línies en un fitxer. Bona cosa que hem sed. La funció resultant amb sed seria la següent.
Ordres
línia d'impressió(){
sed -n '$ {1}p '-
}
Ara vegem què passa quan fem servir la línia d’impressió de paraules.
Ordres
paraules|línia d'impressió50Sortida
50Bé. Es veu bé, però provem alguna cosa que sembli una mica menys trivial.
Ordres
declari -xfparaulesdeclari -xflínia d'impressió
seq 1 10$(paraules| wc -la ) | xargs-ibash -c 'paraules | línia d'impressió {} '
Sortida
111
21
31
41
51
61
71
81
91
Bé. Ara és més semblant! Veureu com es pot utilitzar sed en un script bash per imprimir qualsevol línia d’un fitxer.
Exemples Sed sense ordres equivalents
En un entorn de línia d'ordres, de vegades el camí cap a una solució que presenta menys resistència és el camí sed; en cas contrari, acabareu fent més feina de la necessària. Algunes ordres es poden mostrar a continuació.
Ordeneu totes les línies d'un script d'intèrpret d'ordres
sed -I 's / ^ / # /'-Suprimeix la primera línia
sed -I '1d'-
Suprimeixúltimlínia
sed -I '$ d'-
Inseriu una línia abans de les línies que coincideixin amb un patró
sed '/ 0 $ / i ---'-
Inseriu una línia després de les línies que coincideixin amb un patró
sed '/ 0 $ / ---'-
Eliminar les etiquetes html
sed -I 's /†*.// g'-
Actualització eregdinscodi PHP vell per executardinsphp7 o posterior
sed 's / ereg ( ([^,] * ). ([^)] * ) ./ strpos ( 2, 1) / g'
Comprovarsi sedés anterior a una versió determinada
sed -I 'v 4.5'-
Exemple de versió sed ramificació a bash
A la part superior dels exemples, hi ha una línia per comprovar si sed és anterior a una versió determinada que podem utilitzar per implementar la versió de bifurcació en bash, que crec que és més fàcil que intentar implementar una funció per comparar els números de versió de la sortida de la versió sed . L’únic inconvenient és que si hi ha una versió anterior de sed que no admet l’ordre v, estem en problemes.
Ordres
test-sed-version-at-most() {trobo -n | sed 'v$ {1}'-2> /dev/nul
}
versió de prova()
{
trobo -n 'Versió$ {1}. Bé. Fes-ho;
test-sed-version-at-most$ {1} && {
trobo -n 'vell';
cert
} || {
trobo -n 'nou'
};
trobo 'camí'.
}
principal()
{
localv;
pervdins 4.{4,5};
fer
versió de prova$ {v};
fet
}
principal
Sortida
Versió4.4. Bé. Feu-ho a l’antiga.Versió4.5. Bé. Feu-ho de la nova manera.
Tingueu en compte que la versió de sed que s’executa a la meva màquina a l’hora d’escriure aquests caràcters és 4.4, cosa que explicaria la sortida anterior. A més, al mateix temps, la darrera versió de gnu sed era de 4,7, uns 3 anys més gran que la que tinc. El meu sed és vell! De fet, a sed 4.0.6, es va afegir un paràmetre a l'ordre version, de manera que aquesta estratègia funciona per a qualsevol dita v4.0.6, que és indulgent tenint en compte que la versió es va llançar a principis del 2003. Ets bo.
Vaig fer algunes excavacions addicionals, realment llegint NOTÍCIES del darrer codi font. La versió 4.6 té una nova característica, –debug que aboca l’script i anota les línies de sortida. Això us permetrà traduir scripts sed generats per funcions en bash a forma canònica. Guai! No oblideu que necessiteu una versió sed que es basi en bash. Aquí és on entra en joc aquest sedós exemple.
Exemple de funció bash amb sed per despullar etiquetes HTML
Als exemples anteriors hi ha una línia per eliminar etiquetes HTML. Posem això en una funció bash i l'utilitzem per eliminar totes les etiquetes HTML de l'últim article que vaig escriure.
Ordres
strip-tags(){
sed -I 's /†*.// g'-
}
arrissar https://linuxhint.com/bash_cut_command/ --silenciat |strip-tags
No puc dir que sigui perfecte, però almenys es pot llegir al terminal.
Exemples de Sed amb fluxos de treball: Exemple de flux de treball: substituïu de manera segura tots mitjançant find, grep i sed
És segur dir que els canvis fets amb sed amb l’opció -i són irreversibles. És a dir, tret que estigueu completament segur del text que s'ha de substituir, és probable que acabeu amb un caràcter menys del previst. És per això que, en aquest exemple, utilitzarem sed en un flux de treball per substituir de manera segura el text de tots els fitxers que hàgiu seleccionat.
Flux de treball
- trobar
- adherència
- sed
trobar
Aquí seleccionareu els fitxers a substituir. Suggereixo utilitzar una ordre en aquestes línies:
trobar tipusf-nom | adherència -v-I| xargs-i ...Per exemple, és possible que vulgueu limitar els fitxers per substituir els fitxers PHP, excloent els directoris del dipòsit git, de la manera següent.
trobar tipusf-nom*.php| adherència -v -I '.go' | xargs -i...Llegiu més sobre l'ordre xargs a bash.
adherència
A continuació, intentarem fer coincidir some_pattern als fitxers seleccionats de la següent manera. Tingueu en compte que, com que estem fent servir l'opció -o per grep, la sortida només mostrarà la cadena coincident si n'hi ha.
trobar tipusf-nom*.php| adherència -v -I '.go' |xargs -i adherència -Isome_pattern-o
L'ordre anterior hauria de retornar una llista de cadenes que coincideixin amb some_pattern.
sed
Finalment, volem substituir totes les cadenes que coincideixin amb some_pattern. Per fer-ho, hem de convertir grep en sed de la manera següent.
trobar tipusf-nom*.php| adherència -v -I '.go' |xargs -i sed -i -Is/some_pattern/substitució/g
L’ordre grep es converteix en sed -i i s’elimina l’opció -o. I aquí ho teniu.
Ara podeu comprovar quines cadenes es substituiran prèviament en lloc de provar sort.
Notes finals sobre les opcions utilitzades en exemples
A continuació, es mostra una llista d’opcions que s’utilitzen en els exemples sed comentats breument.
Opció | Descripció |
-i | Edita al lloc. Si l'entrada és un fitxer (no introduït), el resultat de les expressions sobreescriurà el contingut del fitxer. Sed n'accepta un per exemple, sed -n ... |
-I | -e significa expressió. El seu paràmetre és una expressió en el llenguatge sed. Sed n'accepta molts per exemple, sed -e'expr1 '-e'expr2'
|
-n | Amaga la línia no afectada per l'expressió. És a dir, si l'expressió és una declaració d'impressió en l'idioma sed, les línies que no s'incloguin a la declaració d'impressió no s'inclouran a la sortida. per exemple, sed -n ...
|
Per obtenir més informació sobre les opcions de sed disponibles, vegeu sed –help
Notes finals sobre ordres equivalents que s'utilitzen en exemples
Les següents utilitats de línia d’ordres s’inclouen als exemples sed amb ordres equivalents.
- ordenar
- cap
- cua
- adherència
- gat
- NS
- tee
Nota final al final, per exemple ordres equivalents
En cas que us pregunteu què passa amb el personatge - de l'exemple, aquesta nota és la vostra. Vaig afegir un caràcter - després de la majoria d'ordres en els exemples per donar a entendre que esperem que l'entrada es rebi a través d'una canonada. Això és,
gatalgun fitxer| ordenar -R-| cap -1Tanmateix, quan hi ha l'ordre a la part esquerra de la canonada, podem ometre la pista de la manera següent.
gatalgun fitxer| ordenar -R | cap -1Això és el que passava amb el caràcter - després de les ordres dels exemples.
Notes finals sobre les funcions per configurar
En cas que ho busqueu, aquí teniu funcions per a la configuració dels exemples anteriors. La sortida obtinguda mitjançant declarar -f. Llegiu més sobre l'ordre declare a bash per obtenir més usos.
Ordres
paraules(){
seq 100
}
barra()
{
trobo ---
}
vell-php()
{
trobo 'ereg ($ UA,' Bottybot ')'
}
Linia inferior
Em va agradar escriure exemples de Bash sed i fins i tot vaig agafar alguns trucs addicionals pel camí. Sed és una potent utilitat de línia de comandes i un llenguatge expressiu per manipular fitxers de text. Si us ha agradat aprendre sobre el sed, no us preocupeu, encara n’hi ha moltes més per tocar. Sed on.