Объяснение tac --before

Использовать замену строки:

$ IP=192.168.15.73.64759
$ echo ${IP%.*}
192.168.15.73

IP=$(netstat | grep telnet | grep ESTABLISHED | awk 'NR==1{ print $5}')
echo ${IP%.*}
12
21.10.2019, 21:18
2 ответа

tacработает с записями и их разделителями, прикреплен , по умолчанию после соответствующей записи. Это несколько противоречит -интуитивным по сравнению с другими инструментами (, основанными на записи -, такими как AWK ), где разделители отсоединены.

С -bзаписи с присоединенным символом новой строки выглядят следующим образом (в исходном порядке):

  • Hello
  • \nNew
  • \nWorld
  • \n!
  • \n

Вывод в обратном порядке, это становится

\n\n!\nWorld\nNewHello

, что соответствует результату, который вы видите.

Без -bзаписи с присоединенной новой строкой выглядят следующим образом:

  • Hello\n
  • New\n
  • World\n
  • !\n

Вывод в обратном порядке, это становится

!\nWorld\nNew\nHello\n
23
27.01.2020, 19:54

Это выглядит странно отчасти из-за того, что tacработает несколько противоречащим -интуитивным образом, как мне кажется. Воспользуемся хорошо заметными разделителями — запятыми.

Что я ожидаю увидеть в результате выполнения следующей команды:

% echo -ne 'A,B,C' | tac -s,

?

Ну, я вижу это, поскольку есть А, отделенное от В, отделенное от С. Таким образом, (я заключаю, что )напечатаны в обратном порядке, они должны составлять C,B,A. Давайте проверим. Увы, вместо этого он печатает по-другому:

% echo -ne 'A,B,C' | tac -s,
CB,A,

Мы можем сделать вывод, что tacпалочки для первоначального размещения разделителей:Aвсе еще имеют его впоследствии, как и B, но Cего не было, и поэтому он напечатан как есть.

Что произойдет, если на этот раз я запущу tacс -b?

% echo -ne 'A,B,C' | tac -bs,
,C,BA

По-видимому, это работает следующим образом:-b:он проходит через вход в обратном направлении, пока не найдет разделитель. Как выяснилось, напечатано:

,. Затем он печатает текст, который был пропущен при поиске :

.

C. Затем цикл повторяется:

,B. Поскольку разделителей не осталось, печатается только остаток:

A.

Why there is no newline between New and Hello?

Согласно объяснению, которое я дал выше, Newбудет на новой строке, потому что перед ним стоит новая строка -,но так как Helloне было — он будет напечатан как есть.

5
27.01.2020, 19:54

Теги

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