Удалите новую строку из переменной Unix

Я создаю минимальные сценарии оболочки для своих частых команд и даю им краткие названия. Они все хранятся в том же месте, которое добавляется к PATH.

Тем путем у меня есть доступ ярлыка к очень сложным командам, и в отличие от этого с alias Я могу превратить изменяемые части своей задачи в параметры командной строки моего ярлыка.

10
29.11.2012, 16:36
4 ответа

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

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

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

dt="${dt%
}"                # Remove a trailing newline.
25
27.01.2020, 19:59
  • 1
    Просто к вашему сведению, когда Вы используете ${var//a/} Вы не должны использовать в последний раз /, ${var//a} сделает точно то же. –  rush 29.11.2012, 15:28
  • 2
    . Ниже вещи работавший dt= $ {dt//$ '\n '/} # Удаляют все новые строки. –  Pavani 29.11.2012, 15:58

Кажется, что Вам нужны "TR", что-то как:

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

TR человека для детали, как обычно

11
27.01.2020, 19:59

Эта работа над Linux (удар):

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)"
2
27.01.2020, 19:59
  • 1
    +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 29.11.2012, 16:55

от Oracle sqlplus руководство

СТРАНИЦЫ НАБОРА [IZE] {14 | n} Определяют номер строк на каждой странице вывода. Можно обнулить РАЗМЕР СТРАНИЦЫ для подавления всех заголовков, разрывов страницы, заголовков, начальной пустой строки и другой информации о форматировании.

поэтому добавьте a set pagesize 0 к Вашему сценарию для предотвращения направляющейся пустой строки.

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


dt=`sqlplus -s user/pwd@servicename < < EOF
set feedback off
set pagesize 0
set trimout on
set trimspool on
set linesize 300
set echo off
set verify off

select  replace(to_char((sysdate-7),'YYYYMonDD')||'_'
||to_char((sysdate-1),'YYYYMonDD'),chr(10), '') from dual;
exit;
EOF`

echo "test $dt$dt"
0
27.01.2020, 19:59

Теги

Похожие вопросы