使用sed我想编辑一个数字而不知道它有多少位数。
EX1.
variableA = 34, variableB = 4
EX2.
variableA = 123, variableB = 22
我希望能够在不知道原始数字的情况下更新这些变量中的任何一个。线的格式不会改变,但数值将会改变。
理想情况下,这将是一个用于替换数字赋值的表达式
答案 0 :(得分:2)
使用正则表达式替换替换将执行此操作。不幸的是,那么你有一个问题和一个正则表达式。但无论如何:调整这些以用你真正的新价值取代42;我使用“,”或“$”来区分两个变量:
对于variableA :
sed -e 's/= [0-9]\{1,\},/= 42,/'
对于variableB :
sed -e 's/= [0-9]\{1,\}$/= 42/'
答案 1 :(得分:2)
试试这个单程解决方案:
n1=55 n2=66 # define replacement numbers
sed -E 's/^(.* = )[[:digit:]]+(, .* = )[[:digit:]]+$/\1'"$n1"'\2'"$n2"'/' <<EOF
variableA = 34, variableB = 4
variableA = 123, variableB = 22
EOF
这会产生:
variableA = 55, variableB = 66
variableA = 55, variableB = 66
-E
启用对扩展正则表达式的支持,这些正则表达式在语法方面更强大,更简单 - 这将适用于BSD / OSX和Linux平台。s///
函数调用指定两个替换号码。或者, 2-pass solution 如果您想按变量名称匹配:
n1=55 n2=66 # define replacement numbers
sed -E 's/(variableA = )[[:digit:]]+/\1'"$n1"'/; s/(variableB = )[[:digit:]]+/\1'"$n2"'/' <<EOF
variableA = 34, variableB = 4
variableA = 123, variableB = 22
EOF
s///
调用,每个变量一次。 答案 2 :(得分:0)
您可以使用正则表达式
echo "variableA = 123, variableB = 22" | sed -e 's/\(variableA = \)[0-9]\+, \(variableB = \)[0-9]\+/\1999,\2888/'
结果:
variableA = 999,variableB = 888