¿Hay alguna forma de especificar un delimitador de campo para más espacios con el comando de corte? (como "" +)? Por ejemplo: en la siguiente cadena, me gusta alcanzar el valor '3744', ¿qué delimitador de campo debo decir?
$ps axu | grep jboss
jboss 2574 0.0 0.0 3744 1092 ? S Aug17 0:00 /bin/sh /usr/java/jboss/bin/run.sh -c example.com -b 0.0.0.0
cut -d' ' no es lo que quiero, ya que es solo para un solo espacio.
awkno es lo que estoy buscando tampoco, pero ¿cómo hacer con 'cortar'?
Gracias.

trcomo se muestra aquí: stackoverflow.com/a/4483833/168143ps+grep, puede usar elpgrepque está disponible en la mayoría de las distribuciones modernas. Le devolverá el resultado exactamente en la forma en que lo necesita.Respuestas:
En realidad
awkes exactamente la herramienta que deberías estar buscando:o puedes deshacerte del
greptodo ya queawkconoce las expresiones regulares:Pero si, por alguna extraña razón, realmente no puedes usar
awk, hay otras cosas más simples que puede hacer, como contraer primero todos los espacios en blanco en un solo espacio:Ese
greptruco, por cierto, es una forma ordenada de obtener solo losjbossprocesos y no elgrep jbossuno (lo mismo para elawkvariante).El
grepproceso tendrá un literalgrep [j]bossen su comando de proceso, por lo que no será capturado por elgrepmismo, que busca la clase de caracteres[j]seguida deboss.Esta es una manera ingeniosa de evitar el
| grep xyz | grep -v grepparadigma que usan algunas personas.fuente
greptruco parece no funcionar en los archivos crontab. ¿Cualquier razón?awkLa versión es probablemente la mejor opción, pero también puedes usarlacutsi primero aprietas las repeticiones contr:fuente
tr -s ' 'es muy lindo! Espero poder recordar eso mejor queawkMe gusta usar el comando tr -s para esto
Esto exprime todos los espacios en blanco a 1 espacio. De esta manera, decir corte para usar un espacio como delimitador se cumple como se esperaba.
fuente
Voy a nominar
tr -s [:blank:]como la mejor respuesta.¿Por qué queremos usar cortar? Tiene el comando mágico que dice "queremos el tercer campo y cada campo después de él, omitiendo los dos primeros campos"
No creo que haya un comando equivalente para la división awk o perl donde no sabemos cuántos campos habrá, es decir, colocar el tercer campo en el campo X.
fuente
Solución más corta / simple: uso
cuts(corte en esteroides que escribí)Tenga en cuenta que
cutslos índices de campo están basados en cero, por lo que el quinto campo se especifica como 4http://arielf.github.io/cuts/
E incluso más corto (sin usar corte en absoluto) es:
fuente
Una forma de evitar esto es ir:
para reemplazar múltiples espacios consecutivos con uno solo.
fuente
\ses una extensión de sed de GNU. En OS X, puede pasar la-Ebandera a sed para habilitar expresiones regulares extendidas, luego usar[[:space:]]en lugar de\s, así:sed -E 's/[[:space:]]+/ /g'Personalmente, tiendo a usar awk para trabajos como este. Por ejemplo:
fuente
ps axu | awk '/[j]boss/ {print $5}'.Como alternativa, siempre hay perl:
O, si desea obtener todos los campos comenzando en el campo # 3 (como se indica en una de las respuestas anteriores):
fuente
lsofIntentélsof|perl -lane 'print $F[5]'esto a veces obtiene la quinta columna, a veces la sextaSi desea elegir columnas de una salida ps, ¿alguna razón para no usar -o?
p.ej
Ancho de columna mínimo asignado, sin relleno, solo separador de campo de espacio único.
Pid y vsz tienen un ancho de 10 caracteres, un separador de campo de 1 espacio.
Utilizado en un script: -
fuente
Otra forma si debe usar el comando de corte
En Solaris, reemplace awk con
nawko/usr/xpg4/bin/awkfuente
Todavía me gusta la forma en que Perl maneja los campos con espacios en blanco.
El primer campo es $ F [0].
fuente
Mi enfoque es almacenar el PID en un archivo en / tmp, y encontrar el proceso correcto usando la
-Sopción parassh. Eso podría ser un mal uso, pero funciona para mí.Un mejor enfoque podría ser consultar el
SSH_PIDderecho antes de matarlo, ya que el archivo podría estar obsoleto y mataría un proceso incorrecto.fuente