Найти все используемые оболочки среди всех повторяющихся пользователей в файле etc/passwd

Это должно охватывать вас, пока файл соответствует описанию. Команда сохраняет информацию до и после номера телефона и форматирует ее так, как вы просили. Если вывод выглядит хорошо, добавьте параметр -iк sed, чтобы отредактировать его на месте, или предоставьте ему перенаправление вывода с помощью > output_fileв конце.

sed -E "s/(.*\t.*\t)\+?1?[[:space:]]?\(?([0-9]{3})\)?.*([0-9]{3}).*([0-9]{4})(.*)/\1\(\2\)\ \3-\4\5/g" filename

Я проверил это на файле, содержащем этот текст:

    jfk 902-765-9292 hat jump cat
    jk  902 819 2244 hat jump cat
    98  902 823-4456 hat jump cat
    78h +1 075 242 1566 hat jump cat
jklj    kjlj    +1 075-242-1566 hat jump cat
jk  jkj +1 (075) 242-1566 hat jump cat
    kj  (204) 799-9810 hat jump cat
kj  89  (204)-799-9810 hat jump cat

Результат был:

    jfk (902) 765-9292 hat jump cat
    jk  (902) 819-2244 hat jump cat
    98  (902) 823-4456 hat jump cat
    78h (075) 242-1566 hat jump cat
jklj    kjlj    (075) 242-1566 hat jump cat
jk  jkj (075) 242-1566 hat jump cat
    kj  (204) 799-9810 hat jump cat
kj  89  (204) 799-9810 hat jump cat
0
05.05.2020, 18:40
2 ответа

Вы могли бы сделать

sort /etc/passwd | uniq -c | grep -vE '^ +1 ' | cut -d: -f 7 | sort -u

или все в awk

awk -F: '++count[$1] == 2 {shell[$NF]} END {for (s in shell) print s}' /etc/passwd
2
28.04.2021, 23:16

Следующая команда будет только сравнивать имя пользователя, игнорируя любые различия в других полях (, например. ид, гид, homedir,shell )и подобрать все оболочки, используемые дублирующими именами пользователей.

grep -f <(cut -d: -f1 /etc/passwd | sort | uniq -d | sed -e "s/^/^/") /etc/passwd | cut -d: -f7 | sort -u
0
28.04.2021, 23:16

Теги

Похожие вопросы