Відповіді:
Якщо припустити, що ви насправді маєте на увазі, що ви хочете видалити все до останньої кишки і залишити 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}'
Відповідно до коментарів Graeme, ми можемо використовувати awk
для друку останнього стовпчика самостійно, використовуючи NF
змінну, awk
як показано нижче.
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' | awk -F'\t' '{print $NF}'
Включення коментарів Graeme, щоб позбутися зайвого sed
Команду можна змінити, як показано нижче.
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | awk -F':' '{print $NF}'
awk
. В основному я намагаюся перевірити команди, які я спочатку отримав у своїй відповіді, і намагаюся змінити їх відповідно до вимог користувача. :)
-F
Варіант для awk
Задає роздільник полів. Якщо ви скажете awk
використовувати двокрапку, не потрібно замінювати двокрапки на вкладки. Крім того, якщо ви хочете отримати останнє поле, яке ви можете використовувати $NF
замість $4
, це буде спрацьовувати, якщо не завжди є три колони.
Будь ласка, спробуй
редагувати: знято якір
echo 'abc:fjk' |sed 's/.*:/john.doe/g'
і видалити
echo 'abc:fjk' |sed 's/.*://g'
^
Якір не має ніякого значення в разі , якщо ні питання або в вашому прикладі справи. Будь-яка адреса, що починається з /.*
вже, означає ^
.
awk
, чому б не просто зробитиawk -F:
?