Скопируйте строку и вставьте ее в новую позицию с помощью sed или awk

Obtendrá este comportamiento si el modo de archivo del directorio de inicio del usuario en el host de destino no está configurado correctamente. ¡No es solo el modo del directorio.ssh lo que debe configurarse correctamente!

ssh al host y proporcione su contraseña para iniciar sesión, luego

chmod 755 ~
logout

Luego ssh nuevamente y suponiendo que todo lo demás esté configurado correctamente (vea las otras respuestas ), debería poder iniciar sesión.

Así es como se ve cuando el directorio de inicio está completamente abierto (777 ). Tenga en cuenta que no prueba la clave rsa:

ssh -v user@host
...
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/iwoolf/.ssh/id_rsa
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Trying private key: /home/iwoolf/.ssh/id_dsa
debug1: Trying private key: /home/iwoolf/.ssh/id_ecdsa
debug1: Trying private key: /home/iwoolf/.ssh/id_ed25519
debug1: Next authentication method: password
...

Luego, con los permisos del directorio de inicio configurados correctamente (755):

ssh -v user@host
...
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/iwoolf/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: Authentication succeeded (publickey).
6
29.04.2019, 13:08
8 ответов

Чистыйsed:

sed 'H;1h;$!d;G' file.txt

Все строки собираются в области удержания, а затем добавляются к последней строке:

  • Hдобавляет текущую строку в область хранения. К сожалению, это приведет к началу пробела с новой строки, поэтому 1hдля первой строки пробел перезаписывается этой строкой без предшествующей новой строки
  • $!dозначает, что если это не(!)последняя строка ($), dудалить строку, потому что мы не хотим ее печатать
  • Gвыполняется только для последней строки, так как для остальных строк dперестали обрабатываться. Теперь все строки (от первой до последней ), которые мы собрали в области удержания, добавляются к текущей (последней )строке с помощью команды G, и все это печатается в конце скрипта.
9
27.01.2020, 20:20

Попробуйте это,

 tail -n1 file | xargs -I '{}' sed '1i{}' file
  • tail -n1напечатает последнюю строку файла
  • xargs -Iпередаст хвостовой вывод в sed
  • sed '1iвставит контекст в первую строку

если выходные данные выглядят как файл, добавьте параметр -iв sed для встроенного редактирования

1
27.01.2020, 20:20

или просто так, без sed и прочего

tail -1 list && cat list
9
27.01.2020, 20:20

Другой sedальтернативой может быть:

sed '$!d; r infile' infile

удалить все строки, кроме последней, прочитать следующую и вывести весь файл.

8
27.01.2020, 20:20

Сed:

$ printf '$t0\n,p\n' | ed -s file
f
a
b
c
d
e
f

Команда tв edпереносит/копирует строку из адресуемой строки (здесь $для последней строки )после строки, адресованной ее аргументом (здесь 0, т.е. вставить перед первой строкой ). Команда ,pраспечатывает содержимое буфера редактирования (, измените его на w, чтобы записать результат обратно в файл ).

10
27.01.2020, 20:20

GNU awk:

awk 'ENDFILE { if(NR==FNR) print } NR!=FNR' infile{,}

Портативный awk:

awk 'NR!=FNR && !f { f=1; print p } NR!=FNR; { p=$0 }' infile{,}
3
27.01.2020, 20:20

Переверните файл, запомните первую строку и напечатайте ее после последней строки , затем повторно -переверните файл:

tac file | awk 'FNR == 1 {last=$0} {print} END {print last}' | tac
# or
tac file | sed -n '1h; p; ${x;p}' | tac
2
27.01.2020, 20:20

Попытался выполнить команду sed, указанную ниже, и она тоже сработала

команда

k=`sed -n '$p' filename `
sed '1i '$k'' filename

выход

f
a
b
c
d
e
f
2
27.01.2020, 20:20

Теги

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