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

У меня есть текстовый файл:

example.txt

UserName = JIU62H123;
USER_NAME = JIU62H123;

Мне нужно изменить JIU62H123 на A5B4C6DF9.Очевидно, что для этого файла я мог бы просто сделать:

//bash
sed -i '' 's/JIU62H123/A5B4C6DF9/g' example.txt

Это работает для этого файла, как вы можете видеть из результата:

example.txt

UserName = A5B4C6DF9;
USER_NAME = A5B4C6DF9;

Однако на самом деле я не буду знать, действительно ли имя пользователя опережает время.Все, что я знаю, это то, что файл имеет такую ​​форму:

example.txt

UserName = <some_letters_and_numbers>;
USER_NAME = <some_letters_and_numbers>;

Мне нужно изменить <some_letters_and_numbers> на A5B4C6DF9.Это можно сделать с помощью одной или нескольких команд sed?

Ответы [ 5 ]

0 голосов
/ 06 марта 2019

большое спасибо за ответы, проголосовали за каждого.Я закончил тем, что нашел решение, подобное этому:

sed -i '' -E 's/(DEVELOPMENT_TEAM|DevelopmentTeam)( = )(.*)/\1\2A5B4C6DF9;/' example.txt

Большинство ответов, приведенных здесь, похоже, соответствуют шаблону букв / цифр, но я думаю, что может быть лучше сопоставить что-нибудь и заменить егос желаемым содержанием.

0 голосов
/ 04 марта 2019

К change <some_letters_and_numbers> to A5B4C6DF9 и предполагается, что вы хотите добавить on the right side of "= " с помощью sed, который имеет -E для ERE:

$ sed -E 's/= [[:alnum:]]+/= A5B4C6DF9/' file
UserName = A5B4C6DF9;
USER_NAME = A5B4C6DF9;

и с любым POSIX sed:

$ sed 's/= [[:alnum:]][[:alnum:]]*/= A5B4C6DF9/' file
UserName = A5B4C6DF9;
USER_NAME = A5B4C6DF9;
0 голосов
/ 04 марта 2019

С помощью awk вы можете:

$ awk '{$3="A5B4C6DF9;"}1' file
UserName = A5B4C6DF9;
USER_NAME = A5B4C6DF9;

т.е.заменить 3-е поле, разделенное пробелом.С достаточно новым GNU awk вы можете выполнить редактирование на месте:

$ awk -i inplace '{$3="A5B4C6DF9;"}1' file
0 голосов
/ 04 марта 2019

В реальных словах:

  • в строках, начинающихся с UserName или USER_NAME, сопровождаемых знаком равенства =,
  • заменить правую часть на ...

В sed синтаксис:

Использование переменная для адаптивности

newId=A5B4C6DF9
sed -e '/^U\(serName\|\SER_NAME) *=/s/= .*$/'$newId/ -i example.txt

Nota Цитируемая частьконец перед переменной!

Эта работа до $newId не содержит специальных символов.Если переменная может содержать пробелы или другие не алфавитно-цифровые символы, используйте двойные кавычки:

sed -e '/^U\(serName\|\SER_NAME) *=/s/= .*$/'"$newId"/ -i example.txt
0 голосов
/ 04 марта 2019

Как насчет использования регулярных выражений?

sed -ir 's/^(USER_NAME|UserName) = [A-Za-z0-9]+;$/\1 = A5B4C6DF9;/g' example.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...