在正则表达式中获得意外结果

时间:2017-11-08 12:20:14

标签: regex sed

我正在使用下面的正则表达式命令从行中删除字符串,但我的正则表达式没有按照我的期望工作。

sed -ie "s/^\s*worker\.\(.*\)\.balance_workers=\(.*\)wallet,*\(.*\)/worker.\1.balance_workers=\2\3/"

我的专栏是:

worker.walletloadbalancer.balance_workers=wallet,wallet2

结果我正在

worker.walletloadbalancer.balance_workers=wallet,2

期待

worker.walletloadbalancer.balance_workers=wallet2

但如果我使用

sed -ie "s/^\s*worker\.\(.*\)\.balance_workers=\(.*\)wallet2,*\(.*\)/worker.\1.balance_workers=\2\3/"

获得预期结果

worker.walletloadbalancer.balance_workers=wallet

2 个答案:

答案 0 :(得分:0)

您可以使用此sed

sed 's/=wallet,\(.*\)/=\1/g' file

来自sed(工作):

sed -e "s/^\s*worker\.\(.*\)\.balance_workers=\(.*\)wallet,\(.*\)/worker.\1.balance_workers=\2\3/" file

问题是:

sed -e "s/^\s*worker\.\(.*\)\.balance_workers=\(.*\)wallet,*\(.*\)/worker.\1.balance_workers=\2\3/"
                                                           ^
                                                         You do not need this '*'

修改

使用此sed

sed -Ee 's/=(.*)wallet2($|,(.*))/=\1\3/g' -e 's/,$//' file

<强>测试

$ cat file
worker.walletloadbalancer.balance_workers=wallet1,wallet,wallet2

$ sed -Ee 's/=(.*)wallet($|,(.*))/=\1\3/g' -e 's/,$//' file
worker.walletloadbalancer.balance_workers=wallet1,wallet2

$ sed -Ee 's/=(.*)wallet1($|,(.*))/=\1\3/g' -e 's/,$//' file
worker.walletloadbalancer.balance_workers=wallet,wallet2

$ sed -Ee 's/=(.*)wallet2($|,(.*))/=\1\3/g' -e 's/,$//' file
worker.walletloadbalancer.balance_workers=wallet1,wallet

答案 1 :(得分:0)

如果您的Input_file与显示的示例相同,那么以下内容可能对您有帮助。

LISS_SELECTEDNOTFOCUS

输出如下。

sed 's/\(.*,\)\([^[:digit:]]*\)\(.*\)/\1\3/g'  Input_file