2016-04-19 5 views
1

Ich habe einen Befehl, den Zeitpunkt von Dateinamen extrahiert und zählt die einzigartigen Tage:den sed Ausgangs gibt 10 verschiedene Ergebnisse auf Solaris Sortierung und 11

find xml/ -type f -name "*.201604*.xml" | head -5 | sed "s/.*\.\(2016[0-9]\{4\}\)\(.*\)/\1/g" | sort | uniq -c

Die Ergebnisse auf Solaris 10 sind:

# find xml/ -type f -name "*.201604*.xml" | head -5 | sed "s/.*\.\(2016[0-9]\{4\}\)\(.*\)/\1/g" | sort | uniq -c 
    2 20160412 
    1 20160417 
    2 20160418 
# uname -a 
SunOS localhost 5.10 Generic_150400-26 sun4u sparc SUNW,SPARC-Enterprise 
# which sed sort 
/usr/bin/sed 
/usr/bin/sort 

Die Ergebnisse auf Solaris 11 sind:

$ find xml/ -type f -name "*.201604*.xml" | head -5 | sed "s/.*\.\(2016[0-9]\{4\}\)\(.*\)/\1/g" | sort | uniq -c 
    1 20160401 
    1 20160403 
    1 20160405 
    1 xml/results/subres/ABC.DEF.GH01.20160401224003.123456.123456.xml 
    1 xml/results/subres/ABC.DEF.GH02.20160412124035.234567.234567.xml 
$ uname -a 
SunOS localhost 5.11 11.2 sun4v sparc sun4v 
$ which sed sort 
/usr/bin/sed 
/usr/bin/sort 

Aus irgendeinem rea Sohn, auf Solaris 11 der sort Befehl bewirkt, dass die sed den vollständigen Dateipfad anstelle von übereinstimmenden Regex-Ausdruck zurückgeben.

Es funktioniert ohne Art obwohl (Solaris 11):

$ find xml/ -type f -name "*.201604*.xml" | head -5 | sed "s/.*\.\(2016[0-9]\{4\}\)\(.*\)/\1/g" 
20160403 
20160401 
20160401 
20160412 
20160405 

Warum? Hat jemand anderes dieses Verhalten?

+0

Welche Ausgabe erhalten Sie unter Solaris 11, wenn Sie 'sort | ersetzen uniq -c' mit einer einfachen 'Katze'? –

+0

@AndrewHenle das gleiche Ergebnis wie bei 'sort', es zeigt zwei Dateinamen statt regex Ergebnis. – schabluk

+0

Ist 'sed' Aliasing? –

Antwort

0

Problem gelöst, indem unset LANG tun. Es wurde auf festgelegt. Die man zeigt an, dass LANG die Ausführung des Befehls sed beeinflusst.

+0

Warum sollte die sed-Ausgabe geleitet werden, um zu sortieren oder keinen Unterschied zu machen? –

1

find gibt unsortierte Ergebnisse. Sortieren Sie die Ausgabe von find, bevor Sie head -5 verwenden.
Auch set LC_ALL=C

+0

Ich bin mir bewusst, 'unsortierte Ergebnisse zu finden. In diesem Fall macht es keinen Sinn, nach "find" zu sortieren, da Dateien unterschiedliche Namenskonventionen haben und nicht nach Datum sortiert werden. Deshalb muss ich das Datum mit Regex extrahieren. – schabluk

1

Du nennst sort nach dem Aufruf sed so sort nicht, wie sed verhält sich auswirken können. Du nimmst einfach verschiedene Versionen von sed auf jedem Rechner auf, wahrscheinlich einen aus/bin, der die geflüchteten ERE-Zeichen nicht versteht, um ein RE-Intervall zu erzeugen (\{4\}) und das andere aus/usr/xpg4/bin oder ähnlichem .

Der Fall, in dem Solaris 11 sich mit/ohne Sortierung anders verhält, kann ohne eine Änderung der Umgebung nicht passieren - vielleicht befinden Sie sich in einer anderen Shell oder haben ein anderes Setup-Skript oder etwas anderes ausgeführt.

Sie where sed auf beiden Maschinen (oder which sed oder whence sed oder ...)

+0

Bitte beachten Sie in den Codebeispielen, dass ich 'sed sort' schon gemacht habe. Die Wege sind gleich. – schabluk

+0

Auch ohne 'sort' nach' sed' sind die Ergebnisse korrekt, also sieht es aus wie 'sort', oder' cat' beeinflusst das 'sed'. Seltsam, da dies Rohre sind. – schabluk

+0

Und nur zwei von fünf Ausgabezeilen sind keine Regex-Übereinstimmungsergebnisse. Also stimmt es mit den ersten drei überein und stimmt nicht mit zwei überein. – schabluk

Verwandte Themen