3

Как вставить строку, содержащую экранированные символы (\n, \t и т.д.) В качестве разделителя для команды seq ?

Стандартный формат включает символ новой строки:

    $ seq 3
    1
    2
    3

Но если я попытаюсь добавить что-то плюс символ новой строки, обратный слеш экранируется, и вместо него используется литерал "\n":

    $ seq -s "$\n" 3
    1\n2\n3

То же самое происходит с использованием простых кавычек, без кавычек или других экранированных символов:

    $ seq -s "\t" 3
    1\t2\t3

    $ seq -s \t 3
    1t2t3

Это не стандартное поведение для таких команд, как echo , поэтому я немного запутался здесь ...

Редактировать: в идеале, я хотел бы несколько портативное решение (которое работает в tsch а также, например, bash ), и не прибегая к Perl или другим языкам.

5 ответов5

2

Чтобы получить вкладки и другие странные символы, вы также можете попробовать это:

$ seq -s "$(echo -e '\t')" 3
1   2   3
$ seq -s "$(echo -e '\n$')" 3
1
$2
$3
2

В bash вместо того, чтобы пытаться вводить символ новой строки в качестве escape-последовательности, просто введите его как новую строку в середине строки в кавычках, нажав Enter. Например,

bash-4.1$ seq -s "$
> " 3
1$
2$
3
bash-4.1$
1

По крайней мере, в bash вы можете использовать строки, которые интерпретируются как в ANSI C, используя формат $'string' (это должны быть одинарные кавычки).

seq -s $'$\n' 3
1$
2$
3

К сожалению, tcsh жалуется на недопустимое имя переменной.

0

seq -s "$(echo -e '\n')" 3 не работает. Возможное решение: seq -s "$(echo -e '\n\r')" 3 | tr -d '\r'

0

Я не знаю - но как альтернатива

$ perl -e 'printf "%9d\n",$_ for 6..15'

производит

        6
        7
        8
        9
       10
       11
       12
       13
       14
       15

а также

$ perl -le 'print "\$$_" for 1..5'

производит

$1
$2
$3
$4
$5

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .