我有一个这样的文件:
1 = zara
2 = gucci
我想编写一个bash脚本,它读取两个变量,并决定将其中一行中的数字更改为新数字。我有这个脚本用于此目的:
pattern="$num[[:space:]]=[[:space:]].*"
sed -ie 's,'"$pattern"','"$num"',\ =\ '"$newBrandName"',' $fileLocation
变量num
,newBrandName
和fileLocation
具有正确的值;我已通过echo
命令检查了这个。
但是当我运行脚本时,我收到了这个错误:
sed: -e expression #1, char 52: unknown option to `s'
SED命令的echo
输出为:
sed -ie s,1[[:space:]]=[[:space:]].*,1\ =\ sign, /root/info.info
任何人都可以帮助我使用正则表达式吗?
答案 0 :(得分:1)
s
的格式为s/regexp/replacement/
。你不能有多个表达式。试试这个:
sed -i -e '/^${num}[[:space:]]*=[[:space:]]*/s|.*|$num = $newBrandName|" "$fileLocation"
它会找到与^${num}[[:space:]]*=[[:space:]]*
匹配的行,并用$num = $newBrandName
替换其上的所有内容。
您还应该将-i
和-e
分开,以便e
不会被解释为-i
的备用后缀。
答案 1 :(得分:0)
如果认为这是因为你有一个无关的,
左:
pattern="$num[[:space:]]=[[:space:]].*"
sed -ie 's,'"$pattern"','"$num"',\ =\ '"$newBrandName"',' $fileLocation
--------------------------------^
您可以考虑转义它,或使用其他字符,例如@
。