Могу ли я использовать SED для замены значения в диапазоне? - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь заменить поле на правильное значение, но не могу понять, как выполнить полную подстановку.Вот что у меня так далеко.

sed -i '' 's/AuthUserName=\[7000-8000]/AuthUserName=7325/g' "$f"

Я пытаюсь найти все файлы, которые содержат AuthUserName=7000-8000, и заставить их все сказать AuthUserName=7325.Я могу сделать это индивидуально, просто имея, например, AuthUserName=7000, и он заменит его на 7325, но я не могу понять это.

Я пытался использовать = *, но безуспешно.Может кто-нибудь мне помочь?Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

Вы можете попробовать что-то вроде

sed 's/AuthUserName=7[0-9][0-9][0-9]\|AuthUserName=8000/AuthUserName=7325/g'

или

sed 's/AuthUserName=7[[:digit:]][[:digit:]][[:digit:]]\|AuthUserName=8000/AuthUserName=7325/g'

[0-9] или [[: digit:]] эквивалентны.

\|выражает альтернативное выражение

0 голосов
/ 14 февраля 2019

Использование perl и lookaround .Сначала тестовый файл:

$ cat file
asd
asd AuthUserName=700
asd AuthUserName=7000
asd AuthUserName=8000
asd AuthUserName=9000
asd AuthUserName=70000

Однострочный Perl:

$ perl -pe 's/(?<=AuthUserName=)(7[0-9]{3}|8000)(?![0-9])/7325/g' file

т.е. 7000-8000, за которыми следует AuthUserName=, за которыми не следует цифра , вывод:

asd
asd AuthUserName=700
asd AuthUserName=7325
asd AuthUserName=7325
asd AuthUserName=9000
asd AuthUserName=70000

В седе:

$ sed 's/\(AuthUserName=\)\(7[0-9]\{3\}\|8000\)\([^0-9]\|$\)/\17325\3/g' file
0 голосов
/ 14 февраля 2019

Для чисел от 7000 до 7999 вы можете использовать регулярное выражение типа 7[0-9][0-9][0-9].Где каждый [0-9] просто означает «одна цифра от 0 до 9».Тогда вам нужно будет рассматривать 8000 как особый случай.

...