Как я могу распечатать все символы до определенного шаблона (исключая сам шаблон) с помощью grep/awk/sed.

echo "abc-1234a :" | grep <do-something>

просто распечатать abc-1234a

1 ответов


Я думаю, что это ближе к тому, что вы получаете, но не зная, чего вы действительно пытаетесь достичь, трудно сказать.

echo "abc-1234a :" | egrep -o '^[^:]+'

... хотя это также будет соответствовать линиям, у которых нет двоеточия. Если вы хотите только линии с двоеточиями, и вы должны используйте только grep, это может сработать:

echo "abc-1234a :" | grep : | egrep -o '^[^:]+'

конечно, это имеет смысл, только если ваш echo "abc-1234a :" является примером, который будет заменен, возможно, несколькими строками вход.

самый маленький инструмент, который вы могли бы использовать, вероятно,cut:

echo "abc-1234a :" | cut -d: -f1

и sed всегда доступен...

echo "abc-1234a :" | sed 's/ *:.*//'

для этого последнего, если вы хотите печатать только строки, содержащие двоеточие, измените его на:

echo "abc-1234a :" | sed -ne 's/ *:.*//p'

черт, вы даже можете сделать это в чистом bash:

while read line; do
  field="${line%%:*}"
  # do stuff with $field
done <<<"abc-1234a :"

информацию о %% вы можете man bash и ищите "