Усовершенствованная версия примера sed находит общий префикс N строк (N> = 0):
string1="test toast"
string2="test test"
string3="teaser"
{ echo "$string1"; echo "$string2"; echo "$string3"; } | sed -e 'N;s/^\(.*\).*\n\1.*$/\1\n\1/;D'
Если строки хранятся в массиве, их можно передать в sed с printf :
strings=("test toast" "test test" "teaser")
printf "%s\n" "${strings[@]}" | sed -e '$!{N;s/^\(.*\).*\n\1.*$/\1\n\1/;D;}'
Вы также можете использовать здесь здесь :
strings=("test toast" "test test" "teaser")
oIFS=$IFS
IFS= Здесь (как и все перенаправления) может идти куда угодно в пределах простой команды.
\n'
<<<"${strings[*]}" sed -e '$!{N;s/^\(.*\).*\n\1.*$/\1\n\1/;D;}'
IFS=$oIFS
# for a local IFS:
(IFS= Здесь (как и все перенаправления) может идти куда угодно в пределах простой команды.
\n'; sed -e '$!{N;s/^\(.*\).*\n\1.*$/\1\n\1/;D;}' <<<"${strings[*]}")
Здесь (как и все перенаправления) может идти куда угодно в пределах простой команды.
Я думаю, что атрибут description
может быть тем, что вы ищете. Это возвращает список кортежей, описывающих столбцы возвращаемых данных. Он отлично работает, если не возвращаются строки, например:
>>> import cx_Oracle >>> c = cx_Oracle.connect("username", "password") >>> cr = c.cursor() >>> cr.execute("select * from dual where 1=0") <__builtin__.OracleCursor on <cx_Oracle.Connection to user username@local>> >>> cr.description [('DUMMY', <type 'cx_Oracle.STRING'>, 1, 1, 0, 0, 1)]