Это зависит от вашей терминальной программы, но большинство терминальных программ не имеют функции сохранения выделенного текста.
LXTerminal, uxterm, Konsole и GNOME Terminal, кажется, лишены этой "функции", но могут быть и другие, у которых она есть. Посмотрите на структуру меню вашей терминальной программы, возможно, там есть что-то вроде "Сохранить выделенное"
Si su grep
admite expresiones regulares compatibles con Perl, puede buscar coincidencias no -con avidez hasta el siguiente límite de palabra:
echo "$string" | grep -oP 'Icecream.*?\b'
De lo contrario, haga coincidir la secuencia más larga de caracteres no -en blanco:
echo "$string" | grep -o 'Icecream[^[:blank:]]*'
O mantenga todo en el caparazón y elimine la secuencia final más larga de caracteres que comiencen con un espacio:
echo "${string%% *}"
Por ejemplo, si usaGNU grep
:
$ echo "Icecream123 AirplaneBCD CompanyTL1 ComputerYU1" | grep -oP '\bIcecream.*?(\s|$)' --color
Utiliza PCRE
.
Usando un grep
que conoce-o
:
$ printf '%s\n' "$string" | grep -o '\<Icecream[^[:blank:]]*'
Icecream123
El patrón \<Icecream[^[:blank:]]*
coincide con la cadenaIcecream
(donde I
está precedido por un carácter que no es una palabra -, o el comienzo de la línea )seguido de cero o más espacios en blanco que no -(no espacios ni tabulaciones ).
Usandoawk
:
$ printf '%s\n' "$string" | awk -v RS=' ' '/^Icecream/'
Icecream123
El programa awk
divide la cadena en registros -separados por espacios y prueba cada uno. Imprimirá los que comienzan con la cadena Icecream
.
Usando mawk
o GNU awk
, también puede usar
printf '%s\n' "$string" | awk -v RS='[[:blank:]]' '/^Icecream/'
ya que interpretan RS
como una expresión regular si contiene más de un carácter.
Con sed
, de forma similar agrep
:
$ printf '%s\n' "$string" | sed 's/.*\(\<Icecream[^[:blank:]]*\).*/\1/'
Icecream123
Usando/bin/sh
:
set -- Icecream123 AirplaneBCD CompanyTL1 ComputerYU1
for string; do
case $string in
Icecream*)
printf '%s\n' "$string"
break
esac
done
Perl (con un poco de ayuda detr
):
$ printf '%s\n' "$string" | tr ' ' '\n' | perl -ne '/Icecream\S*/ && print'
Icecream123
o simplemente
$ printf '%s\n' "$string" | perl -ne '/(Icecream\S*)/ && print $1, "\n"'
Icecream123
Desde que etiquetaste bash:
[[ $string =~ (Icecream[^ ]*) ]] && result=${BASH_REMATCH[1]}
Más generalmente, para un término de búsqueda en$search
:
[[ $string =~ ($search[^ ]*) ]] && result=${BASH_REMATCH[1]}
... o con ampliación de parámetros:
# remove any leading text up to -and through- the search text:
x=${string##*$search}
# remove any trailing space onwards
result=$search${x%% *}
Tal vez un poco más simple, especialmente porque dice que su versión de grep no es compatible con perl regex:
$ echo $string | tr ' ' '\n' | grep 'Icecream'
Icecream123
El tr
divide la cadena en líneas reemplazando todos los espacios con líneas nuevas. Entonces puedes usar grep
fácilmente.
También puedes escribir lo siguiente para obtener solo lo que sigue a la palabra que buscas:
$ echo $string | tr ' ' '\n' | sed -n 's/Icecream//p'
123