Ответы:
Предполагая, что вы на самом деле имеете в виду, вы хотите удалить все до последнего двоеточия и оставить 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:
?