вы можете сделать это просто так в bash :, который имитирует человеческое взаимодействие с su. Я использую его в своих автоматических удаленных установщиках для серверов, на которых нет sudo.
sucmd="sh -c 'sleep 3; echo $pass' | script -qc 'su -c./yourscript.sh root '"
ssh -t -l "$user" "$ipaddress" -p 22 "$sucmd"
С уважением,
Предположим, вы хотите, чтобы данные имени и фамилии находились в одной строке с символом табуляции в -между ними:
Использованиеxmlstarlet
:
xmlstarlet sel -t -m '/names' \
-v 'first_name' -nl \
-v 'last_name' -nl file.xml 2>/dev/null |
paste - -
Команда xmlstarlet
анализирует значения узлов first_name
и last_name
под узлом names
и выводит их в одной строке каждое.
Две строки вывода вставляются в одну строку с символом табуляции в качестве разделителя с помощью paste
. Используйте, например. -d ','
с paste
, чтобы получить вывод с разделителями-запятыми -.
Я перенаправляю стандартный поток ошибок на /dev/null
, потому что позже в документе есть несколько фиктивных объявлений пространств имен, на которые xmlstarlet
справедливо жалуется.
Использование xq
изhttps://kislyuk.github.io/yq/:
xq -r '.names | [.first_name,.last_name ] | @tsv' file.xml
Здесь используется оператор @tsv
для создания вывода с разделителями табуляцией -. Он выводит те же данные, что и код xmlstarlet
выше, но вместо выражения XPath мы используем выражение jq
.
Измените @tsv
на @csv
, чтобы получить выходные данные в формате CSV с полными котировками.
awk -F "[><]" '/first_name|last_name/{print $3}' file.txt |awk 'ORS=" "'
output
Mohammed Sani ABACHA