SED命令为's'错误提供了未知选项

时间:2014-08-10 07:37:57

标签: bash sed

我有一个这样的文件:

1 = zara
2 = gucci

我想编写一个bash脚本,它读取两个变量,并决定将其中一行中的数字更改为新数字。我有这个脚本用于此目的:

pattern="$num[[:space:]]=[[:space:]].*"
sed -ie 's,'"$pattern"','"$num"',\ =\ '"$newBrandName"',' $fileLocation

变量numnewBrandNamefileLocation具有正确的值;我已通过echo命令检查了这个。

但是当我运行脚本时,我收到了这个错误:

sed: -e expression #1, char 52: unknown option to `s'

SED命令的echo输出为:

sed -ie s,1[[:space:]]=[[:space:]].*,1\ =\ sign, /root/info.info

任何人都可以帮助我使用正则表达式吗?

2 个答案:

答案 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
--------------------------------^

您可以考虑转义它,或使用其他字符,例如@