我可以使用SED替换范围内的值吗?

时间:2019-02-13 23:10:47

标签: sed substitution

我试图用适当的值替换字段,但是我不知道如何进行一揽子替换。这是我到目前为止所拥有的。

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

我正在尝试搜索包含AuthUserName=7000-8000的所有文件,并使它们全部说成AuthUserName=7325。我可以通过仅使用AuthUserName=7000来单独进行操作,它将用7325代替它,但我不知道。

我尝试使用= *,但没有成功。谁能帮我吗?预先感谢。

3 个答案:

答案 0 :(得分:0)

对于数字70007999,您可以使用诸如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