Zeichenkette spiegeln

Ich suche nach einer Möglichkeit, Zeichenketten innerhalb der Shell zu spiegeln.
Damit das auf anderen Unix Installationen (Solaris 5.8) auch funktioniert, sollen nur Bordmittel benutzt werden.

Aus der Zeichenkette „Hello world!“ soll dann „!dlrow olleH“ werden. Kann mir jemand einen Hinweis geben, wie so etwas umzusetzen ist?

Gruß Markus

Damit das auf anderen Unix Installationen (Solaris 5.8) auch
funktioniert, sollen nur Bordmittel benutzt werden.

Die Boardmittel von Solaris kenn ich kaum.

Aus der Zeichenkette „Hello world!“ soll dann „!dlrow olleH“
werden. Kann mir jemand einen Hinweis geben, wie so etwas
umzusetzen ist?

Hinweise nur? Hm, okay. wc kann bytes zaehlen. seq kann Zahlenfolgen erstellen, for kann Schleifen durchlaufen, cut kann bytes ausschneiden. Der Rest ist eine Frage des quotings, gut durchmischen:

frank@zion [~] $ ./foo.sh wortfuchs
shcuftrow
frank@zion [~] $ ./foo.sh Hello world!
!dlrow olleH
frank@zion [~] $

Falls das mit dem Wort ‚Hinweis‘ nicht ganz so ernste gemeint war, kann ich Dir das script auch schicken, sind nur 9 Zeilen.

SCNR,
Gruss vom Frank.

Hallo,

kann ich Dir das script auch schicken, sind nur 9 Zeilen.

was passiert, wenn man das Script vorher noch durch ‚tac‘ piped? erkennt es, daß ‚tac‘ eigentlich ein umgekehrtes ‚cat‘ ist oder läuft es umgekehrt gegen die Wand?

SCNRAOL,

Sebastian

Hallo,

Huhu,

kann ich Dir das script auch schicken, sind nur 9 Zeilen.

was passiert, wenn man das Script vorher noch durch ‚tac‘
piped? erkennt es, daß ‚tac‘ eigentlich ein umgekehrtes ‚cat‘
ist oder läuft es umgekehrt gegen die Wand?

Nun, es scheint so. Zumindest sieht das script so aus, als waere es gegen eine Wand gelaufen:

frank@zion [~] $ ./foo.sh `tac foo.sh`
hs/nib/!# `1 `\1 - `\\\c- cw| @$ ohce`\\\ rpxe`\ qes` ni i rof od "`i$b- tuc| "\@$"\ ohce`" n- ohce enod ohce
frank@zion [~] $

ROT13 fuer Arme, pretty funny. Aber auch nur, weil die shell die newlines rauswirft, damit kann es nicht so recht umgehen (trotzdem lustig):

frank@zion [~] $ ./foo.sh "shell
\> script"

t
pl
il
re
ch
ss

frank@zion [~] $ ./foo.sh "`tac foo.sh`" |wc -l
 227
frank@zion [~] $

227 Zeilen Kauderwelsch. Hm, fehlen irgendwo ein paar ticks…

Amuesierten
Gruss vom Frank.

Kannst du das Skript bitte mal posten!? Ohne das ist die Dekodierung ein wenig aufwendig, zumal da sicherlich auch einige \n fehlen!

Danke, Markus

Kannst du das Skript bitte mal posten!?

Klar:

frank@zion [~] $ cat foo.sh
#!/bin/sh

for i in `seq \`expr \\\`echo $@ |wc -c\\\` - 1\` 1`
do
 echo -n "`echo \"$@\" |cut -b$i`"
done
echo
frank@zion [~] $

Sind (nach der code-Optimierung) nur noch sieben Zeilen.

HTH,
Gruss vom Frank.

Kannst du das Skript bitte mal posten!?

Klar:

frank@zion [~] $ cat foo.sh
#!/bin/sh

for i in seq \expr \`echo $@ |wc -c\` - 1` 1 do echo -n "echo „$@“ |cut -b$i`"
done
echo
frank@zion [~] $

Sind (nach der code-Optimierung) nur
noch sieben Zeilen.

Auf den Zielsystemen gibt es kein tex-Paket und somit auch keinen seq-Befehl.
Siehst du da noch eine Alternative?

Gruß Markus

Hallo,

Auf den Zielsystemen gibt es kein tex-Paket und somit auch
keinen seq-Befehl.

niehaus@corrosive:~\> rpmlocate $(which seq)
Searching for /usr/bin/seq in rpm db...

coreutils-5.0-90:
/usr/bin/seq
niehaus@corrosive:~\> 

„Isch sähe keine Texe“

Siehst du da noch eine Alternative?

Ja.

Mehr Nebel um das oninöse „Zielsystem“ werfen. Hilft immer. Manchmal. Nicht.

Gruß,

Sebastian

Kannst du das Skript bitte mal posten!?

Klar: [snip script]

Auf den Zielsystemen gibt es kein tex-Paket und somit auch
keinen seq-Befehl.

seq? TeX? Hm, muss ich ja nicht verstehen.

Siehst du da noch eine Alternative?

Kloar:

frank@zion [~] $ cat foo.new.sh
#!/bin/sh

len=`expr \`echo $@ |wc -c\` - 1`

while [$len -gt 0]
do
 echo -n "`echo \"$@\" |cut -b$len`"
 len=`expr $len - 1`
done
echo
frank@zion [~]

Verdammt, 10 Zeilen… sollte ich langsam mit der GPL winken?

Gruss vom Frank.

#!/bin/sh

len=expr \echo $@ |wc -c` - 1`

while [$len -gt 0]
do
echo -n „echo \"$@\" |cut -b$len
len=expr $len - 1
done
echo

Aha! Verstehe, cut löst das Problem! Wirklich pfiffig!
Vielen Dank für diesen hilfreichen (jetzt sachdienlichen) Hinweis! :o)

Gruß Markus

Auf den Zielsystemen gibt es kein tex-Paket und somit auch
keinen seq-Befehl.

niehaus@corrosive:~> rpmlocate $(which seq)
Searching for /usr/bin/seq in rpm db…

coreutils-5.0-90:
/usr/bin/seq
niehaus@corrosive:~>

Vermutlich Basis von Linux, auf meinem System (Solaris 5.8, siehe Head) habe ich dieses Kommando nicht finden können. Hier wird statt rpm das pkg Format verwendet. Alles was SUN nicht von Haus aus mitliefert bereitet dann beim Kunden Probleme.

Siehst du da noch eine Alternative?

Ja.

Mehr Nebel um das oninöse „Zielsystem“ werfen. Hilft immer.

Plattform war angegeben. Trotzdem Danke für deine Mühen!

Gruß Markus

frank@zion [~] Verdammt, 10 Zeilen… sollte ich
langsam mit der GPL winken?

GPL? Nun gut, hier dann mein Beitrag zu Open-Source. Die Option -n von echo hat wohl noch einige Probleme in Sachen Portabilität. Hier die Version ohne -n:

#!/usr/bin/sh

len=expr \echo $@ |wc -c` - 1`
reverse_string=""

while [$len -gt 0]
do
curchr=echo $@ | cut -b$len ;
reverse_string=$reverse_string$curchr ;
len=expr $len - 1 ;
done
echo $reverse_string

Nimmst du mich in deiner Version-History auf? :o)

Gruß Markus

Hi,

ich will euch jetzt nicht den Spass verderben aber unter Linux geht das wunderbar mit „rev“

martin@cleopatra:~$ echo "So geht das einfacher" | rev
rehcafnie sad theg oS

Leider scheint es für Solaris keine Pendant zu geben :confused:

Gruß
Martin

Hi,

Hallo,

ich will euch jetzt nicht den Spass verderben

Tust Du aber.

aber unter Linux geht das wunderbar mit „rev“

*grummel*

frank@zion [~] $ apropos Baum
Baum: nothing appropriate.
frank@zion [~] $ apropos Wald
Wald: nothing appropriate.
frank@zion [~] $ apropos reverse
TIFFReverseBits (3t) - byte- and bit-swapping routines
col (1) - filter reverse line feeds from input
rev (1) - reverse lines of a file
rvnamed (8) - reverse name resolution daemon for iptraf (8)
tac (1) - concatenate and print files in reverse
xxd (1) - make a hexdump or do the reverse.
frank@zion [~] $

Leider scheint es für Solaris keine Pendant zu geben :confused:

Siehste, SCNR,
Gruss vom Frank.

Dieser Beitrag wurde von der Community gemeldet und ist vorübergehend ausgeblendet.