Встроенный поиск и замена с помощью sed - PullRequest
0 голосов
/ 04 июля 2019

У меня есть файл паролей, и нужно манипулировать такими записями, которые начинаются с ENTP.

Пример записи:

ENTP\username:VAS:1749078453:1749078453::/home/username:/bin/bash

до

ENTP\username:username_tst:1749078453:1749078453::/home/username:/bin/bash

т.е. мы должны искать и заменять VAS на username_tst во всех случаях.

Я знаю, что мы можем выполнить поиск и заменить с помощью sed, но я не совсем понимаю, как заменить его на "имя пользователя "из первого поля.Есть ли способ, которым мы можем сделать это в sed?

1 Ответ

1 голос
/ 04 июля 2019

Я думаю, что проще всего использовать sed с опцией -r

  -r, --regexp-extended 
      use extended regular expressions in the script

, чтобы избежать необходимости использовать много выражений с обратной косой чертой:

sed -r 's/(\\)(username)(:VAS:)/\1\2:\2_tst:/'

Тест:

$> echo "ENTP\username:VAS:1749078453:1749078453::/home/username:/bin/bash" | sed -r 's/(\\)(username)(:VAS:)/\1\2:\2_tst:/'
ENTP\username:username_tst:1749078453:1749078453::/home/username:/bin/bash

Так что теперь со своим файлом вы можете сделать:

cat password_file | sed -r 's/(\\)(username)(:VAS:)/\1\2:\2_tst:/'

или:

sed -r 's/(\\)(username)(:VAS:)/\1\2:\2_tst:/' < password_file

Если это выглядит хорошо, вы можете сделать:

sed -r 's/(\\)(username)(:VAS:)/\1\2:\2_tst:/' < password_file > out_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...