Существует утилита, которая будет искать информацию о пользователе независимо от того, хранится ли эта информация в локальных файлах, таких как / etc / passwd
, или в LDAP, или каким-либо другим способом. Он называется getent
.
Чтобы получить информацию о пользователе, вы запускаете getent passwd $ USER
. Вы получите строку следующего вида:
[jenny@sameen ~]$ getent passwd jenny
jenny:*:1001:1001:Jenny Dybedahl:/home/jenny:/usr/local/bin/bash
Теперь вы можете просто вырезать из нее домашний каталог, например используя cut, например:
[jenny@sameen ~]$ getent passwd jenny | cut -d: -f6
/home/jenny
Это удаляет последний символ, если это число.
sed 's|[0-9]$| |g' file
Выход:
SCDE
SF
STR1D
SREDF2
FRED
STER2R
Соответствует ли это вашим критериям?
Ввод данных:
cat user324294
SCDE1
SF9
STR1D2
SREDF21
FRED
STER2R4
И преобразование:
sed 's/[0-9]$//' user324294
SCDE
SF
STR1D
SREDF2
FRED
STER2R
Объяснение регулярного выражения :любая цифра, за которой следует конец строки, ничем не заменяется.
Вам нужно регулярное выражение (Регулярное выражение )для соответствия вашему тексту.
Регулярное выражение, которое соответствует одному числу , равно [0-9]
. Конец строки — $
.
Оба вместе:
[0-9]$
Теперь мы можем использовать sed
для удаления текста в каждой строке:
sed 's/[0-9]$//' test.txt
Если вам нужно заменить несколько цифр, используйте модификатор повторения, возможно, в данном случае *. Не то, что вы спрашиваете, но полезно знать:
sed 's/[0-9]*$//' test.txt