Förnöjsam pappa: Varför kommandot ”sed” inte byter ut nyradstecken (20 mars, 2019)

Onsdagen den 20 mars, 2019

I mitt arbete använder jag då och då kommandon från Unix och Linux för att utföra bearbetning av text. Man kan säga att jag fuskar inom området programmering.

Så i dag slet jag mitt hår helt i onödan på grund av något jag borde begripit.

Jag försökte göra utbyten i en lista med värden som såg ut ungefär så här:

1234567
7654321
2222222
3333333
4444444

Det önskade resultatet var:

0001234567
0007654321
0002222222
0003333333
0004444444

Jag försökte med:

cat input.txt | sed 's/\n/\n000/g'

Det gick inte bra, kommandot sed gjorde inget utbyte alls.

Efter över en timme med slitande av hår, begrep jag att eftersom kommandot sed arbetar radvis, så tas inte nyradstecken om hand i utbytet.

Med hjälp av ett annat kommando, ”tr”, kom jag vidare.

cat input.txt | tr '\n' 'X' | sed 's/X/\n000/g'
1234567
0007654321
0002222222
0003333333
0004444444
000

Inte perfekt, men då listan med tal innehåller hundratals, ibland tusentals värden, är det en relativt litet bekymmer att jag manuellt behöver justera första och sista raden i resultatet.

 

  1. Bruno

    1 sed ‘s/^/000/’, om input har samma längd
    2 awk ‘{printf(“%010s\n”, $1)}’, vid olika lång input, men resultatet skall ha samma längd

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut /  Ändra )

Google-foto

Du kommenterar med ditt Google-konto. Logga ut /  Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut /  Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut /  Ändra )

Ansluter till %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.