Ответы:
Предполагая, что вы на самом деле имеете в виду, вы хотите удалить все до последнего двоеточия и оставить john.doeбез изменений:
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' |
sed 's/.*://'
Первая строка просто передает тестовую строку sedдля примера.
Второе - это базовая sedзамена . Часть между первым и вторым /- это регулярное выражение для поиска, а часть между вторым и третьим - это то, чем его заменить (в данном случае мы ничего не удаляем).
Для регулярного выражения .соответствует любому символу, *повторяется это любое количество раз (включая ноль) и :соответствует двоеточию. Так эффективно это что-нибудь, сопровождаемое двоеточием. Так как .*может содержать двоеточие, совпадение будет «жадным», и будет включено все до последнего двоеточия.
sed -r 's/:/\t/g' filename | awk -F'\t' '{print $4}'
Я заменяю все вхождения : на вкладку, а затем использую awkдля извлечения строки john.doe.
Если у вас нет файла, вы можете попробовать это.
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' |
awk -F'\t' '{print $4}'
Согласно комментариям Грэма, мы можем использовать awkдля печати только последний столбец, используя NFпеременную, awkкак показано ниже.
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' | awk -F'\t' '{print $NF}'
Включая комментарии Грэма, чтобы избавиться от ненужного sed
Команду можно изменить, как показано ниже.
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | awk -F':' '{print $NF}'
awk. По сути, я пытаюсь проверить команды, которые я получил в ответе, и изменить их в соответствии с требованиями пользователя. :)
-FВариант для awkЗадает разделитель полей. Если вы скажете awkиспользовать двоеточие, нет необходимости заменять двоеточия на вкладки. Кроме того, если вы хотите получить последнее поле, которое вы можете использовать $NFвместо этого $4, это будет работать, если не всегда 3 двоеточия.
Пожалуйста, попробуй
редактировать: удаленный якорь
echo 'abc:fjk' |sed 's/.*:/john.doe/g'
и удалить
echo 'abc:fjk' |sed 's/.*://g'
^Якорь не имеет никакого значения в случае , если ни вопрос или в вашем примере дела. Любой адрес, начинающийся с, /.*уже подразумевает ^.
awk, почему бы просто не сделатьawk -F:?