Sed substituir Newline per espai

Sed Substituir Newline Per Espai



A UNIX/Linux, l'ordre sed és una eina dedicada per editar fluxos. Pot realitzar diverses operacions en un flux de text, com ara cercar, trobar i substituir, i inserció/supressió. En la seva majoria, però, sed s'utilitza per trobar i substituir continguts de text.

En aquesta guia, mostrarem la substitució de noves línies per espai amb sed.

S'utilitza sed per substituir text

En primer lloc, mirem ràpidament la recerca i substitució bàsica amb sed. S'utilitzarà el mateix mètode en substituir les línies noves per espais amb algunes opcions addicionals. L'estructura de comandaments és la següent:







$ sed -e 's///'

Fes una ullada a la següent comanda:



$ echo 'la guineu marró ràpida' | sed -e 's/quick/fast/g'



L'ordre echo imprimeix la cadena a STDOUT . El flux STDOUT és llavors canalitzat a sed. Hem donat instruccions a sed per substituir qualsevol instància de quick per ser substituït per fast. Finalment, la sortida s'imprimeix a la pantalla.





Substitució de línies noves per espai

Per a la demostració, he creat el següent fitxer de text test.txt amb diversos continguts ficticis:

$ cat test.txt



L'ordre sed accepta expressions regulars per descriure diversos patrons. Aprofitant aquesta funció, descriurem la nova línia com a \n. Provem de substituir les línies noves per espais en blanc:

$ sed -e 's/\n/ /g' test.txt

Tanmateix, això no va funcionar com s'esperava. Per aconseguir aquest objectiu, necessitem algunes opcions addicionals. Fes una ullada a la següent comanda:

$ sed -e ':a;N;$!ba;s/\n/ /g' test.txt

L'ordre sed té diverses seccions; cadascun denota una tasca específica:

  • :a: Crea una etiqueta 'a'
  • N: Afegeix la línia següent a l'espai del patró
  • $!ba: si no és l'última línia, torna a l'etiqueta 'a'
  • s/\n/ /g: cerca i substitueix la nova línia (\n) per espai (/ /). El patró coincideix globalment (/g)

L'ordre sed recorre els passos fins que arriba a l'última línia, substituint tots els \n caràcters per espai.

En lloc d'aquesta ordre complexa, podem simplificar les coses utilitzant el senyalador -z que especifica sed per treballar amb registres separats per nuls. L'ordre seria així:

$ sed -z -e 's/\n/ /g' test.txt

Mètodes Alternatius

Tot i que sed pot fer la tasca bé, hi ha algunes eines alternatives. En aquesta secció, n'examinarem breument un parell.

Per a l'exemple següent, podem utilitzar l'ordre tr per substituir la nova línia per espais en blanc d'una manera senzilla:

$ tr '\n' ' ' < test.txt

També podem utilitzar perl per fer la feina. La sintaxi següent també és similar a la que hem utilitzat amb sed (però simplificada):

$ perl -p -e 's/\n/ /' test.txt

Una altra manera de substituir les noves línies amb espais en blanc és utilitzar l'ordre enganxa. Tingueu en compte que només pot eliminar un caràcter:

$ enganxa -s -d ' ' test.txt

Similar a sed, Linux ve amb una altra eina awk. De manera similar a sed, també pot realitzar algunes substitucions avançades a l'entrada. Per al nostre propòsit, utilitzeu la següent comanda awk:

$ awk 1 ORS=' ' test.txt

Conclusió

Aquesta guia va explorar com podem substituir la nova línia per l'espai mitjançant sed. Es va aconseguir de dues maneres diferents. Aquesta guia també inclou altres eines rellevants que podem utilitzar per substituir la nova línia per espais en blanc.

En lloc d'utilitzar ordres complexes que són difícils de memoritzar, fem servir scripts Bash per realitzar moltes coses a Linux. Tot i que té el preu d'algun rendiment, la flexibilitat i la usabilitat val la pena. Aprendre mes sobre Bash scripting per a principiants .