Заменить все символы, кроме первых четырех символов

Я видел сообщение debug1: X11 forwarding requested but DISPLAY not set, потому что я не устанавливал переменную среды DISPLAY в оболочке перед подключением к хосту. Я использую «Bash в Windows» с openssh.

Вот что нужно сделать:

samik@mysystem:~$ export DISPLAY=localhost:0.0
samik@mysystem:~$ ssh -X samik@remotehost
5
23.10.2020, 09:58
1 ответ

Со стандартным POSIX sed это можно сделать, хотя это сложнее:

md5sum input.txt | sed -E 'h;s/^(.{4}).*$/\1/;x;s/^.{4}(.*)$/\1/;s/./x/g;H;x;s/\n//'

Вот что делает скрипт sed:

h                   copy the pattern buffer into the hold buffer
s/^(.{4}).*$/\1/    keep just the first four characters in the pattern buffer
x                   exchange the pattern buffer with the hold buffer
s/^.{4}(.*)$/\1/    keep all but the first four characters in the pattern buffer
s/./x/g             replace each character with an x
H                   append newline and x's to hold buffer (which has the first four)
x                   exchange again; the pattern buffer has an extra newline, though
s/\n//              remove the newline from the pattern buffer

Буфер шаблонов теперь содержит первые четыре символа плюс x для всех оставшихся символов; цикл заканчивается, и он распечатывается.

Обратите внимание, :переключатель -E включает расширенный синтаксис регулярного выражения. Здесь это не обязательно; вместо этого можно поставить обратную косую черту перед каждой открывающей и закрывающей скобкой, но я думаю, что ее достаточно сложно читать без дополнительной обратной косой черты.

0
18.03.2021, 22:55

Теги

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