Попробуйте следующее:
foo1=$(curl https://domain.com/file.xml | grep -E "string1|string2")
Это запустит curl
1 раз и grep для вхождений string1
или string2
.
Если это разные переменные, немного измените тактику. Захватите вывод curl
, а затем grep
.
output=$(curl https://domain.com/file.xml)
foo1=$(echo "$output" | grep "string1")
foo2=$(echo "$output" | grep "string2")
Вы также можете сохранить результаты в массиве вместо отдельных переменных.
output=$(curl https://domain.com/file.xml)
readarray foo < <(echo "$output" | grep "string1|string2")
С этим немного сложно справиться, если ваши результаты из grep могут не возвращать результаты, поскольку результаты из «string2» могут быть первым или вторым элементом в массиве, но я предоставляю его здесь так же, как демонстрация подхода.
Еще один метод, который использует команду read
вместе с подстановкой процесса ( <(..cmd ..)
).
$ read -d"\n" foo1 foo2 \
<(curl https://domain.com/file.xml | grep -E "string1|string2")
Это снова может быть сложно, если поиск «строка1» ничего не возвращает, в результате чего любые совпадения для «строка2» отображаются в $ foo1
. Кроме того, этот подход имеет тенденцию быть менее переносимым, чем подход №2 или №3, описанный выше.
Вам нужно будет использовать что-то вроде sed , bash не имеет встроенного метода.
d='~/this/is/a-very-very-long-directory-name/with_another_very_long_name/and-here-is-yet-another-one'
# or, d=$(pwd)
e=$( echo "$d" | sed -E 's#([^/]{4})[^/]{13,}([^/.]{3})#\1...\2#g' )
echo "$e"
~/this/is/a-ve...ame/with...ame/and-...one
С другой стороны, вы можете добавить новую строку в приглашение. Я использую что-то вроде этого:
PS1='\u@\h:\w\n\$ '
, что будет выглядеть как
jackman@myhost:~/this/is/a-very-very-long-directory-name/with_another_very_long_name/and-here-is-yet-another-one
$ _
С "расширением параметров" оболочки попробуйте
d='~/this/is/a-very-very-long-directory-name/with_another_very_long_name/and-here-is-yet-another-one'
IFS=/
for DIR in $d
do [ ${#DIR} -gt 8 ] && { TMP=${DIR%%${DIR#????}}
DIR=$TMP...${DIR##${DIR%????}}
}
NEW="$NEW${NEW:+/}$DIR"
done
echo "$NEW"
~/this/is/a-ve...name/with...name/and-...-one
При необходимости сохраните и восстановите IFS
. Запуск в подоболочке не будет работать, так как вы хотите получить доступ к переменной NEW
после этого (, если вы не используете «подстановку команд»... ).