Sida 1 av 2

All text på en rad? [LÖST]

Postat: 26 sep 2009, 22:24
av ubot
Hur gör man för att få all text på en rad istället för på många rader? Jag vill att all text i en textfil ska ligga på en enda rad och inte uppdelat på många rader. Hur gör jag?

Re: All text på en rad?

Postat: 26 sep 2009, 22:28
av Urban Anjar
ubot skrev:Hur gör man för att få all text på en rad istället för på många rader? Jag vill att all text i en textfil ska ligga på en enda rad och inte uppdelat på många rader. Hur gör jag?
Kan du utveckla det lite. Skapar du textfilen i en editor eller i något program? Programspråk?

Re: All text på en rad?

Postat: 26 sep 2009, 22:43
av ubot
Urban Anjar skrev:
ubot skrev:Hur gör man för att få all text på en rad istället för på många rader? Jag vill att all text i en textfil ska ligga på en enda rad och inte uppdelat på många rader. Hur gör jag?
Kan du utveckla det lite. Skapar du textfilen i en editor eller i något program? Programspråk?
Tanken var att ta koden från en webbsida med curl och lägga all kod på en enda rad och sedan plocka ut titel-taggarna med grep/sed. I Terminalen alltså.

Re: All text på en rad?

Postat: 26 sep 2009, 23:03
av Konservburk
Du kan t.ex. pipe:a det genom xargs. Funkar nog med sed också om du ändå tänker använda det. Och grep är förresten onödigt om du använder sed.

Re: All text på en rad?

Postat: 26 sep 2009, 23:12
av ubot
Konservburk skrev:Du kan t.ex. pipe:a det genom xargs. Funkar nog med sed också om du ändå tänker använda det. Och grep är förresten onödigt om du använder sed.
xargs vad? Jag har testat med xargs echo, men det fungerade inte så bra. Hur gör xargs texten till en enda rad?

Re: All text på en rad?

Postat: 27 sep 2009, 00:08
av mcNisse
Låt bli att skriva ut newline tecknen så är du hemma.

Det går utmärkt med echo. (Det gäller dock att hålla reda på vilken version av echo som körs)

Ibland fungerar detta

Kod: Markera allt

echo -n "hej"
Det beror på skalet hellt enkelt.

Du har även tillgång till printf, oftast. Det beror lite på vilket språk du använder.

Re: All text på en rad?

Postat: 27 sep 2009, 00:42
av dmz
|perl -pe 's/\n//g' kanske?

Re: All text på en rad?

Postat: 27 sep 2009, 01:30
av ubot
mcNisse skrev:Låt bli att skriva ut newline tecknen så är du hemma.

Det går utmärkt med echo. (Det gäller dock att hålla reda på vilken version av echo som körs)

Ibland fungerar detta

Kod: Markera allt

echo -n "hej"
Det beror på skalet hellt enkelt.

Du har även tillgång till printf, oftast. Det beror lite på vilket språk du använder.
Nja, alltså, jag tar ju texten från en textfil så jag väljer inte vad jag har att utgå ifrån. Jag har en text i en textfil där jag vill ha all text i en enda rad istället för på många rader.

Re: All text på en rad?

Postat: 27 sep 2009, 07:59
av gusse02

Kod: Markera allt

cat fil | tr -d '\n'

Re: All text på en rad?

Postat: 27 sep 2009, 12:03
av ubot
gusse02 skrev:

Kod: Markera allt

cat fil | tr -d '\n'
Jo, men när jag sedan tittar på koden i nano eller gedit så ligger den inte i en enda rad iaf. Jag har testat med ditt kommando, men utan framgång.

Re: All text på en rad?

Postat: 27 sep 2009, 12:11
av Konservburk
ubot skrev:Jo, men när jag sedan tittar på koden i nano eller gedit så ligger den inte i en enda rad iaf. Jag har testat med ditt kommando, men utan framgång.
Det är samma sak med alla dessa kommandon, oavsett om det är tr, sed, awk, perl, xargs eller något annat. De ändrar inte på orginalfilen. Du kan om du vill spara resultatet någonstans och sedan ersätta orginalfilen. Men ska du ändå bara skicka vidare via en pipeline så är det ganska onödigt.

Re: All text på en rad?

Postat: 27 sep 2009, 12:19
av ubot
Konservburk skrev:
ubot skrev:Jo, men när jag sedan tittar på koden i nano eller gedit så ligger den inte i en enda rad iaf. Jag har testat med ditt kommando, men utan framgång.
Det är samma sak med alla dessa kommandon, oavsett om det är tr, sed, awk, perl, xargs eller något annat. De ändrar inte på orginalfilen. Du kan om du vill spara resultatet någonstans och sedan ersätta orginalfilen. Men ska du ändå bara skicka vidare via en pipeline så är det ganska onödigt.
Men om jag har > filnamn.txt på slutet. Borde inte radändringarna följa med då, dvs bara en enda rad i textfilen som skapas?

Re: All text på en rad?

Postat: 27 sep 2009, 12:25
av Konservburk
ubot skrev:Men om jag har > filnamn.txt på slutet. Borde inte radändringarna följa med då, dvs bara en enda rad i textfilen som skapas?
Bara om du inte läser från filnamn.txt samtidigt.

Det som alltid fungerar är att spara resultatet till en ny fil och först därefter ersätta den gamla...

Kod: Markera allt

ditt_kommando <filnamn.txt >filnamn.txt.tmp && mv -f filnamn.txt.tmp filnamn.txt

Re: All text på en rad?

Postat: 27 sep 2009, 12:29
av ubot
Konservburk skrev:
ubot skrev:Men om jag har > filnamn.txt på slutet. Borde inte radändringarna följa med då, dvs bara en enda rad i textfilen som skapas?
Bara om du inte läser från filnamn.txt samtidigt.

Det som alltid fungerar är att spara resultatet till en ny fil och först därefter ersätta den gamla...

Kod: Markera allt

ditt_kommando <filnamn.txt >filnamn.txt.tmp && mv -f filnamn.txt.tmp filnamn.txt
Aha, omständigt! Jag ska göra ett försök så får vi se hur det går.

Re: All text på en rad?

Postat: 27 sep 2009, 12:39
av Konservburk
ubot skrev:Aha, omständigt! Jag ska göra ett försök så får vi se hur det går.
Det behövs som sagt inte om direkt kör allt genom en pipeline istället: curl ... | sed ... | osv ...

Re: All text på en rad?

Postat: 27 sep 2009, 14:19
av ubot
Konservburk skrev:
ubot skrev:Aha, omständigt! Jag ska göra ett försök så får vi se hur det går.
Det behövs som sagt inte om direkt kör allt genom en pipeline istället: curl ... | sed ... | osv ...
Nja, jag har testat curl ... | tr -d "\n" | grep ... > textfil.txt, men det såg inte ut att fungera. När jag öppnar textfilen i gedit eller nano så ligger texten inte på en enda rad. Hur ska jag skriva för att det ska fungera då isf?

Re: All text på en rad?

Postat: 27 sep 2009, 15:04
av Konservburk
Det här funkar för mig:

Kod: Markera allt

curl -sL http://gnu.org | tr -d '\n' >textfil.txt
Men jag förstår inte varför du vill mellanlagra det i en textfil?

Re: All text på en rad?

Postat: 27 sep 2009, 15:56
av ubot
Konservburk skrev:Det här funkar för mig:

Kod: Markera allt

curl -sL http://gnu.org | tr -d '\n' >textfil.txt
Men jag förstår inte varför du vill mellanlagra det i en textfil?
Haha, nej, det vet inte jag heller. Det är bara en fix idé jag har fått efter massa trixande fram och tillbaka. Jag spolade textfilen och körde allt i en pipe och det gick ju lika bra det. Nu verkar allt funger iaf. Tack! Frågan är varför så många säger att sed/grep/awk inte är bra för att extrahera innehåll mellan html/xml-taggar? Vad är det som kan gå fel om man gör så som jag har gjort nu, dvs lägger hela koden på en enda rad och sedan klipper ut allt mellan vissa taggar?

Re: All text på en rad? [LÖST]

Postat: 27 sep 2009, 16:07
av ubot
Äh, det fungerar ändå inte som jag vill ha det. Varför fungerar inte det här:

Kod: Markera allt

curl -Ls http://www.expressen.se/Nyheter/1.1722360/misstankte-helikopterpiloten-har-gripits | tr -d "\n" | grep -o "<title>.*</title>"
Varför får jag inte titeln? Jag lägger hela koden på en rad med tr -d "\n" och sedan filtrerar jag med grep på enbart titel-taggarna? Varför går det inte? När jag testar med en sida på Aftonbladet så fungerar det, men inte på Expressen. Det här är ju inte tillförlitligt.

Re: All text på en rad?

Postat: 27 sep 2009, 16:22
av Konservburk
ubot skrev:Frågan är varför så många säger att sed/grep/awk inte är bra för att extrahera innehåll mellan html/xml-taggar? Vad är det som kan gå fel om man gör så som jag har gjort nu, dvs lägger hela koden på en enda rad och sedan klipper ut allt mellan vissa taggar?
Problemet är att det kan finnas en massa specialfall som man lätt missar om man inte tänker på det ordentligt. Ingenting som inte går att lösa dock.

Vad händer om taggarna blandar stora och små bokstäver, olika för start- och sluttaggen?
<Html>...</htML>

Vad händer om det finns mellanrum i taggarna?
< html >...</html >

Vad händer om taggarna innehåller argument?
<html arg="hej">...</html>

Vad händer om sluttaggen saknas?
<html>...

Vad händer om det finns flera likadana taggpar på rad?
<html>...</html>...<html>...</html>

Vad händer om det finns flera likadana nästlade taggpar?
<html>...<html>...</html>...</html>

Det finns säkert ännu fler konstigheter man kan behöva se upp med.