我试图用适当的值替换字段,但是我不知道如何进行一揽子替换。这是我到目前为止所拥有的。
sed -i '' 's/AuthUserName=\[7000-8000]/AuthUserName=7325/g' "$f"
我正在尝试搜索包含AuthUserName=7000-8000
的所有文件,并使它们全部说成AuthUserName=7325
。我可以通过仅使用AuthUserName=7000
来单独进行操作,它将用7325代替它,但我不知道。
我尝试使用= *,但没有成功。谁能帮我吗?预先感谢。
答案 0 :(得分:0)
对于数字7000
至7999
,您可以使用诸如7[0-9][0-9][0-9]
之类的正则表达式。每个[0-9]
仅代表“ 0到9之间的一位数字”。然后,您只需要将8000
视为特例即可。
答案 1 :(得分:0)
您可以尝试类似
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:]]是等效的。
\ |表达替代表达
答案 2 :(得分:0)
使用perl和环视。首先是一个测试文件:
$ 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