Как заменить следующую строку
hd_ma_prod_customer_ro:*:123456789:john.doe
с john.doe
В основном мне нужно искать последний двоеточие (:) и удалять все до и включая его.
Предполагая, что вы на самом деле имеете в виду, вы хотите удалить все до последнего двоеточия и оставить 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
, почему бы просто не сделатьawk -F:
?awk
. По сути, я пытаюсь проверить команды, которые я получил в ответе, и изменить их в соответствии с требованиями пользователя. :)-F
Вариант дляawk
Задает разделитель полей. Если вы скажетеawk
использовать двоеточие, нет необходимости заменять двоеточия на вкладки. Кроме того, если вы хотите получить последнее поле, которое вы можете использовать$NF
вместо этого$4
, это будет работать, если не всегда 3 двоеточия.Еще один метод с использованием
awk
:источник
Пожалуйста, попробуй
редактировать: удаленный якорь
и удалить
источник
^
Якорь не имеет никакого значения в случае , если ни вопрос или в вашем примере дела. Любой адрес, начинающийся с,/.*
уже подразумевает^
.