Для ответа на общий вопрос в заголовке введите head -1
или sed -n 1p
- или sed 1q
- это способы выбрать первую строку чего-либо.
Но ваш случай - выбрать первый результат замены на sed
. Вы можете получить это из самого sed
с небольшой модификацией, а также он может выполнять эквивалент вашего grep
и вашего бесполезного cat
, плюс вам нужен только один из ваших групп захвата:
sed
ДОБАВЛЕНО: вы также можете избежать обратной косой черты в регулярном выражении, если вы используете -r
, , как ответил Каффе (пока я писал), в MOST версиях из sed
.
В вашем случае ssh
есть ДВЕ (или три) проблемы. Вы делаете:
ssh user@machine "port=$( commands ) | echo port"
Во-первых, $ (commands)
заключены в строку с двойными кавычками, поэтому они выполняются на ВАШЕМ компьютере, а не на другом. Вы подключаетесь к $ maquina
, но пытаетесь (см. Далее) указать ему напечатать номер порта ВАШЕЙ машины, что является пустой тратой времени. (И исправить это непросто, потому что вы хотите заменить $ sid
плюс использовать одинарные кавычки для команды sed
.)
Во-вторых, вы выполняете port = value | echo $ port
.Этот конвейер запускает отдельные подоболочки (на другой машине); в первой подоболочке он устанавливает переменную порт
равным номеру порта (с вашего компьютера), но эта переменная никогда ни для чего не используется; во второй подоболочке он печатает значение переменной port, которая не установлена в этой подоболочке, поэтому вы получаете пустую строку. Чтобы поместить значение в переменную и затем использовать переменную, используйте ;
или, если хотите или можете зависеть от его статуса выхода &&
или ||
.
Но вам не нужна никакая переменная. За исключением искажения пробелов и раскрытия глобусов, если они есть, которых здесь нет, var = $ (commands); echo $ var
точно то же самое, что команды
. Аналогично ! Echo $ maquina!
где! на самом деле являются обратными кавычками (я не могу найти способ разметки в тексте) без пробелов или глобусов (которые не встречаются в имени машины) точно то же самое, что $ maquina
.
TL; DR:
ssh ora$sid@$maquina "sed