alias quoting challenge

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

alias quoting challenge

Beitrag von linuxCowboy » 09.09.2014 10:53:17

Tausendertrennzeichen für Zahlen ab 5 Stellen:

Code: Alles auswählen

x=`for i in {1..9} {8..1};do seq -s '' $i;done`

echo $x
1 12 123 1234 12345 123456 1234567 12345678 123456789 12345678 1234567 123456 12345 1234 123 12 1

echo $x|perl -pe'while(/\d{5,}/){$b=$`;$m=$&;$a=$'\'';$m=~s/(?<=\d)(?=(\d\d\d)+\b)/./;$_="$b$m$a"}'
1 12 123 1234 12.345 123.456 1.234.567 12.345.678 123.456.789 12.345.678 1.234.567 123.456 12.345 1234 123 12 1
als Alias!??

alias o=quotet_perl_oneliner

Code: Alles auswählen

echo $x | o
1 12 123 1234 12.345 123.456 1.234.567 12.345.678 123.456.789 12.345.678 1.234.567 123.456 12.345 1234 123 12 1
Habe selbst ich nicht hinbekommen. ;-)

($POSTMATCH zählt nicht)

Also zeigt mir wie gut ihr seid!
-der_linux_cowboy --- Besser werden! ... f*** w$$

cosmac
Beiträge: 4573
Registriert: 28.03.2005 22:24:30

Re: alias quoting challenge

Beitrag von cosmac » 09.09.2014 11:11:56

hi,

endlich mal was, was nicht so kalt und nass ist :D

Code: Alles auswählen

$ vi o
perl -pe'while(/\d{5,}/){$b=$`;$m=$&;$a=$'\'';$m=~s/(?<=\d)(?=(\d\d\d)+\b)/./;$_="$b$m$a"}'
:wq
$ alias o=$(cat o)
$ x=`for i in {1..9} {8..1};do seq -s '' $i;done`
$ echo $x | o
1 12 123 1234 12.345 123.456 1.234.567 12.345.678 123.456.789 12.345.678 1.234.567 123.456 12.345 1234 123 12 1
ja, ja, ich weiß, das zählt nicht :P
Beware of programmers who carry screwdrivers.

kuerbis
Beiträge: 20
Registriert: 29.03.2014 12:06:40

Re: alias quoting challenge

Beitrag von kuerbis » 09.09.2014 11:14:53

Code: Alles auswählen

$ alias o='perl -pe'"'"'while(/\d{5,}/){$b=$`;$m=$&;$a=$'"'"'\'"''"';$m=~s/(?<=\d)(?=(\d\d\d)+\b)/./;$_="$b$m$a"}'"'"
$ x='1 12 123 1234 12345 123456 1234567 12345678 123456789 12345678 1234567 123456 12345 1234 123 12 1'
$ echo $x | o
1 12 123 1234 12.345 123.456 1.234.567 12.345.678 123.456.789 12.345.678 1.234.567 123.456 12.345 1234 123 12 1
Alternativ:

Code: Alles auswählen

alias o='perl -pe'\''while(/\d{5,}/){$b=$`;$m=$&;$a=$'\''\'\'\'';$m=~s/(?<=\d)(?=(\d\d\d)+\b)/./;$_="$b$m$a"}'\'
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies." (C.A.R. Hoare)

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: alias quoting challenge

Beitrag von newdeb » 09.09.2014 18:08:30

Code: Alles auswählen

$ alias p='printf "%'\''12.0f\n"'
$ p $x
           1
          12
         123
       1.234
      12.345
     123.456
   1.234.567
  12.345.678
 123.456.789
  12.345.678
   1.234.567
     123.456
      12.345
       1.234
         123
          12
           1
printf verpasst auch den 4stelligen Zahlen das Tsd.-Trennzeichen :(

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: alias quoting challenge

Beitrag von linuxCowboy » 09.09.2014 20:22:38

kuerbis hat geschrieben:

Code: Alles auswählen

alias o='perl -pe'\''while(/\d{5,}/){$b=$`;$m=$&;$a=$'\''\'\'\'';$m=~s/(?<=\d)(?=(\d\d\d)+\b)/./;$_="$b$m$a"}'\'
Du hast es geschafft! Respekt! Es ist wirklich möglich.
:THX:

noch kürzer:

Code: Alles auswählen

alias o='perl -pe'\''while(/\d{5,}/){$b=$`;$m=$&;$a=$'\'\\\'\'';$m=~s/(?<=\d)(?=(\d{3})+\b)/./;$_="$b$m$a"}'\'
cosmac hat geschrieben:

Code: Alles auswählen

alias o=$(cat o)
Originell!

Man muss sich nur zu helfen wissen... ;-)
-der_linux_cowboy --- Besser werden! ... f*** w$$

Antworten