Как добавить число в конец дублированной строки, содержащей шаблон, с помощью sed или awk

Я рекомендую не использовать такие инструменты, как userdel, так как непонятно, почему fooимеет uid 0, и вы не хотите случайно удалить root.

Лучше отредактируйте /etc/passwdи удалите запись для foo. Убедитесь, что у самого root правильная запись:

root:x:0:0:root:/root:/bin/bash

Сделайте то же самое для /etc/group. Удалите запись для fooи проверьте запись для root:

.
root:x:0:

Затем проверьте ввод пароля в /etc/shadow, удалите foo, проверьте ввод root. Запись для rootдолжна выглядеть аналогично:

root:SOMEPASSWORDCODE:17219:0:99999:7:::

Возможно, есть дополнительные записи для fooв /etc/group. Возможный пример:

audio:x:29:foo,pulse

Для чистого задания также удалите fooсоответствующий foo,в этих записях.

Если /home/fooсуществует, проверьте и удалите его впоследствии.

В настоящее время fooсовпадает с root. Вы не найдете процессы или файлы, принадлежащие foo, поскольку все они принадлежат root. Владельцы файлов и процессов регистрируются по их uid, а не по имени. Таким образом, все процессы или файлы с uid 0 отображаются как root. (В качестве альтернативы все корневые процессы и файлы могут отображаться как fooвместоroot).

0
05.02.2020, 15:20
2 ответа

Сawk:

awk '
  NR==FNR && index($0, ">")==1 { a[$0]++ }
  NR!=FNR && a[$0]>1 { $0=$0"_"(++b[$0]) }
  NR!=FNR
' file file

Когда fileчитается в первый раз, увеличивайте счетчик в массиве aдля каждой строки, начинающейся с >.
Когда fileчитается во второй раз, проверьте, больше ли счетчик для данной строки на единицу. Если true, увеличить счетчик в массиве bи добавьте суффикс _и значение счетчика. Затем распечатайте строку.

0
28.04.2021, 23:24
$ awk '{print $0 (/^>/ ? "_" (++c) : "")}' file
>ABC_1
hello
>ABC_2
thanks
>ABC_3
for
>ABC_4
your
>ABC_5
help

Если первое поле может варьироваться и вам нужен уникальный счетчик для каждого значения первого поля, вы просто делаете счетчик массивом, индексированным по первому полю:

$ cat file
>ABC
hello
>FOO
thanks
>ABC
for
>ABC
your
>FOO
help

$ awk '{print $0 (/^>/ ? "_" (++c[$1]) : "")}' file
>ABC_1
hello
>FOO_1
thanks
>ABC_2
for
>ABC_3
your
>FOO_2
help
1
28.04.2021, 23:24

Теги

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