Удалить перевод строки из переменной unix

13

У меня есть переменная, значение которой найдено с помощью SQL-запроса.

Я хочу удалить новую строку charcater из этой переменной, так как я хочу объединить эту переменную с другой. Ниже приведен код:

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
источник

Ответы:

30

Если вы используете bash, вы можете использовать расширение параметров:

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

Следующее должно работать /bin/shтакже:

dt="${dt%
}"                # Remove a trailing newline.
choroba
источник
3
Просто к вашему сведению, когда вы используете, ${var//a/}вам не нужно использовать последний /, ${var//a}будет делать то же самое.
Раш
Спасибо всем. Сработала ниже dt = $ {dt // $ '\ n' /} # Удалить все переводы строки.
Павани
Для тех , кому интересно в полном синтаксисе, вот ссылка на документацию Баша: gnu.org/software/bash/manual/html_node/...
kalaxy
12

Похоже, вам нужно "tr", что-то вроде:

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

Человек, как обычно, подробно, как обычно

sthysel
источник
1

Эта работа на Linux (Bash):

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

В Linux или других системах с утилитой даты GNU это также работает, чтобы получить это значение для dt: (без привлечения Oracle ...)

dt="$(date -d 'yesterday' +%Y%b%d)_$(date -d '7 days ago' +%Y%b%d)"
Герт ван ден Берг
источник
+1 за избежание sqlplus. Если вы работаете в системе без даты GNU, но у вас есть Tcl: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

из руководства Oracle sqlplus

НАСТРОЙКИ СТРАНИЦ [ИЗЭ] {14 | n} Устанавливает количество строк на каждой странице вывода. Вы можете установить PAGESIZE на ноль, чтобы скрыть все заголовки, разрывы страниц, заголовки, начальную пустую строку и другую информацию о форматировании.

поэтому добавьте set pagesize 0в свой скрипт, чтобы избежать пустой строки заголовка.

для большинства моих сценариев я использую настройки в следующем фрагменте кода:

dt = `sqlplus -s user / pwd @ servicename <<EOF
отключить обратную связь
установить размер страницы 0
установить обрезку на
установить тримспул на
установить размер строки 300
отключить эхо
установить выключить

выберите заменить (to_char ((sysdate-7), 'ГГГГМонДД') || '_'
|| to_char ((sysdate-1), 'YYYYMonDD'), chr (10), '') от dual;
Выход;
EOF`

echo "test $ dt $ dt"
miracle173
источник