用双引号替换变量num-SED

用双引号替换变量num-SED,sed,Sed,我有这样一句话: "abc/x-y-z": "^1.4" 我需要在同一文件中将^1.4替换为*,以便输出为“abc/x-y-z”:“*” 双引号内的num可以是任何变量 我尝试过这个,但它非常特定于^1.4编号: sed -i '21s/^1.4/*/' abc.json 有了您展示的样品,请尝试以下内容。您需要在此处转义^以使其成为文字字符,还需要转义点以使其被视为文字字符 sed 's/\^1\.4/*/' Input_file 或者根据OP的评

我有这样一句话:

"abc/x-y-z": "^1.4"
我需要在同一文件中将
^1.4
替换为
*
,以便输出为
“abc/x-y-z”:“*”
双引号内的num可以是任何变量

我尝试过这个,但它非常特定于
^1.4
编号:

sed -i '21s/^1.4/*/' abc.json

有了您展示的样品,请尝试以下内容。您需要在此处转义
^
以使其成为文字字符,还需要转义
点以使其被视为文字字符

sed 's/\^1\.4/*/' Input_file
或者根据OP的评论,使其动态化尝试:

sed 's/\^[0-9]+\.[0-9]+/*/' Input_file
另外,如果您在文件的第21行执行此操作,请像您在尝试中一样使用
21s
。此代码将仅替换^1.4的第一次出现,如果您要替换所有出现的代码,请使用
g
(全局替换)选项替换上述代码


我没有使用
-I
选项(对输入文件本身进行就地更新),一旦您对结果满意,请在上述代码中使用
sed-I
选项。

对于您显示的示例,请尝试以下操作。您需要在此处转义
^
以使其成为文字字符,还需要转义
点以使其被视为文字字符

sed 's/\^1\.4/*/' Input_file
或者根据OP的评论,使其动态化尝试:

sed 's/\^[0-9]+\.[0-9]+/*/' Input_file
另外,如果您在文件的第21行执行此操作,请像您在尝试中一样使用
21s
。此代码将仅替换^1.4的第一次出现,如果您要替换所有出现的代码,请使用
g
(全局替换)选项替换上述代码


我没有使用
-I
选项(对输入文件本身进行就地更新),一旦您对结果满意,就在上面的代码中使用
sed-I
选项。

对文件进行更改时,我更喜欢文件编辑器
ed
而不是流编辑器
sed
ed
是标准的,
sed-i
不是,不同的版本有不同的怪癖,经常会咬到这里的人)


ed-s input.txt在对文件进行更改时,我更喜欢文件编辑器
ed
而不是流编辑器
sed
ed
是标准的,
sed-I
不是,不同的版本有不同的怪癖,经常会伤害到这里的人)


ed-s input.txt
^
是regexp中的起始锚点,必须转义
\^
,还必须转义
,这意味着任何字符如果这是版本依赖项,例如在package.json文件中,版本中可能有多个点:
“@babel/cli”:“^7.2.3”
^
是regexp中的起始锚点,必须转义
\^
,也必须转义
,这意味着任何字符如果这是版本依赖项,例如在package.json文件中,版本中可能有多个点:
“@babel/cli”:“^7.2.3”
@Snk,哦,好的,试试
sed的s/\^[0-9].[0-9]/*/“输入\u文件
,然后告诉我这是否对您有帮助?+就像sed使用的BRE中的文字一样。@Snk,哦,好的,试试
sed的/\^[0-9]\.[0-9]/*/‘输入文件
,然后告诉我这是否有帮助?+只是sed使用的BRE中的一个字面意思。我知道抱怨非标准的
sed
扩展名,然后给出使用非标准
ed
扩展名的答案,是的。我知道抱怨非标准
seded
扩展的答案,是。