Я получил текстовый файл с содержимым, как показано ниже

2012/03/15 : "Password":"@#4JF9u92r","Name":"John"

Я хочу использовать sed, чтобы изменить выше

2012/03/15 : "Password":"XXX","Name":"John"

Я попробовал следующую команду

cat log.txt | sed 's/\("Password":\"\)\(.*\)\(\",\"Name\":\)/\1XXX/'

Но это дает мне

2012/03/15 : "Password":"XXX"John"

Что я сделал не так?

Спасибо!

3 ответа3

1

Вы должны немного изменить свою команду sed :

sed 's/\("Password":\"\).*\(\",\"Name\":\)/\1XXX\2/'
1

Ниже регулярное выражение является базовым, поместите необходимые escape-символы

(\s"Password":")(.*?)(","Name":"(.*?)")

Заменить на \1XXX\3

После размещения правильных escape-символов, я думаю, что-то вроде этого.

cat log.txt | sed '\(s/\"Password\":\"\)\(.*?\)\(\",\"Name\":\"\(.*?\)\"\)/\1XXX\3/'
1

Это может работать для вас:

echo '2012/03/15 : "Password":"@#4JF9u92r","Name":"John"' |
sed 's/\("Password":"\)[^"]*/\1XXX/'
2012/03/15 : "Password":"XXX","Name":"John"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .