Использовать замену строки:
$ 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%.*}
tac
работает с записями и их разделителями, прикреплен , по умолчанию после соответствующей записи. Это несколько противоречит -интуитивным по сравнению с другими инструментами (, основанными на записи -, такими как AWK ), где разделители отсоединены.
С -b
записи с присоединенным символом новой строки выглядят следующим образом (в исходном порядке):
Hello
\nNew
\nWorld
\n!
\n
Вывод в обратном порядке, это становится
\n\n!\nWorld\nNewHello
, что соответствует результату, который вы видите.
Без -b
записи с присоединенной новой строкой выглядят следующим образом:
Hello\n
New\n
World\n
!\n
Вывод в обратном порядке, это становится
!\nWorld\nNew\nHello\n
Это выглядит странно отчасти из-за того, что 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
не было — он будет напечатан как есть.