Что не так с экранированной новой строкой в ​​этой команде sed?

Похоже, что Bash использует файл known_hosts в $ HOME / .ssh для автозаполнения. при некоторых обстоятельствах.

Если вы подключились с помощью SSH (т. Е. С помощью ssh , rsync , git с SSH или любой другой утилиты, которая использует SSH) с этим хостом), который является облачным хостом Amazon, то разумно, чтобы IP-адрес был записан в этот файл и получен подсистемой автозаполнения bash .

Если там есть IP-адрес, вы также сможете определить удобочитаемое имя хоста, которое вы использовали при подключении к хосту (он будет иметь тот же отпечаток SSH в файле).

1
18.01.2017, 17:04
2 ответа

Вы не можете использовать:

s/\
/

для сопоставления новой строки в пространстве шаблонов в форме s / pattern / replacement / . Интерпретация этого шаблона зависит от реализаций. И GNU sed, и BSD sed рассматривают его как буквальную новую строку, но BSD sed не принимает , а вызовет ошибку .

Как правило, вы не можете сопоставить новую строку в конце строки ввода, но вы можете использовать \ n , чтобы сопоставить новую строку, появившуюся в пространстве шаблонов в результате команды N .

Правильный путь, POSIXLY:

sed 'a\
text += num.toString(16);
'

или:

sed 's/$/\
text += num.toString(16);/'
5
27.01.2020, 23:16

То же самое применимо через awk , как показано ниже:

awk '{print $0"\ntext += num.toString(16);"}' file

В этом случае awk будет печатать каждую строку как есть, то напечатает text + = num.toString (16); в новой строке.

0
27.01.2020, 23:16

Теги

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