Newline aus Unix-Variable entfernen

12

Ich habe eine Variable, deren Wert mit SQL-Abfrage gefunden wird.

Ich möchte das neue Zeilenzeichen aus dieser Variablen entfernen, da ich diese Variable mit der anderen verketten möchte. Unten ist der Code:

dt=`sqlplus -s user/pwd@servicename <<EOF
set feedback off;
set head off;
select  replace(to_char((sysdate-7),'YYYYMonDD')||'_'||to_char((sysdate-1),'YYYYMonDD'),chr(10), '') from dual;
exit;
EOF`

echo "test $dt"
Pavani
quelle

Antworten:

28

Wenn Sie verwenden bash, können Sie die Parametererweiterung verwenden:

dt=${dt//$'\n'/} # Remove all newlines.
dt=${dt%$'\n'}   # Remove a trailing newline.

Folgendes sollte ebenfalls funktionieren /bin/sh:

dt="${dt%
}"                # Remove a trailing newline.
Choroba
quelle
3
Nur zu Ihrer Information, wenn Sie verwenden, müssen ${var//a/}Sie nicht zuletzt verwenden /, ${var//a}wird genau das gleiche tun.
Eile
Vielen Dank an alle. Unten hat funktioniert dt = $ {dt // $ '\ n' /} # Alle Zeilenumbrüche entfernen.
Pavani
Für diejenigen, die neugierig auf die vollständige Syntax sind, ist hier ein Link zur Bash-Dokumentation: gnu.org/software/bash/manual/html_node/…
Kalaxy
11

Klingt so, als ob Sie "tr" brauchen, so etwas wie:

 echo ${dt} | tr -d '\n'

man tr wie immer für detail

sthysel
quelle
1

Diese Arbeit unter Linux (Bash):

dt="$(echo "$dt"|tr -d '\n')"

Unter Linux oder anderen Systemen mit dem Datums-Dienstprogramm von GNU funktioniert dies auch, um diesen Wert für dt zu erhalten: (ohne Oracle einzubeziehen ...)

dt="$(date -d 'yesterday' +%Y%b%d)_$(date -d '7 days ago' +%Y%b%d)"
Gert van den Berg
quelle
+1 zur Vermeidung von sqlplus. Wenn Sie auf einem System ohne GNU-Datum sind, aber Tcl haben:echo 'puts [clock format [clock scan "-1 week"] -format %Y%b%d]_[clock format [clock scan yesterday] -format %Y%b%d]' | tclsh
Glenn Jackman
0

aus dem Oracle sqlplus-Handbuch

SEITEN EINSTELLEN [IZE] {14 | n} Legt die Anzahl der Zeilen auf jeder Ausgabeseite fest. Sie können PAGESIZE auf Null setzen, um alle Überschriften, Seitenumbrüche, Titel, die anfängliche Leerzeile und andere Formatierungsinformationen zu unterdrücken.

Fügen Sie set pagesize 0daher Ihrem Skript ein hinzu, um eine Leerzeile zu vermeiden.

Für die meisten meiner Skripte verwende ich die Einstellungen im folgenden Code:

dt = `sqlplus -s user / pwd @ servicename << EOF
Feedback auslösen
Seitengröße auf 0 setzen
Trimmout einschalten
Trimmspule einschalten
Liniengröße 300 einstellen
Echo ausschalten
Aktivieren Sie "Verifizieren"

Wählen Sie Ersetzen (to_char ((sysdate-7), 'YYYYMonDD') || '_'
|| to_char ((sysdate-1), 'YYYYMonDD'), chr (10), '') von dual;
Ausfahrt;
EOF`

echo "test $ dt $ dt"
Wunder173
quelle