Shell 使用sed命令替换由单引号(';';)分隔的数字

Shell 使用sed命令替换由单引号(';';)分隔的数字,shell,sed,Shell,Sed,我试图在文件中使用sed命令替换数字。我可以替换数字,但缺少单个报价。请帮我完成这个 Command = sed -i 's/$my_id/'181122','98977','98934','9915','1748','9359','7959'/g' test.hql Output = (181122,98977,98934,9915,1748,9359,7959) 我试图用单个报价单中的数字替换$my_id。第一个解决方案:请将您的sed更改为以下一次 my_id="your_bash_va

我试图在文件中使用sed命令替换数字。我可以替换数字,但缺少单个报价。请帮我完成这个

Command = sed -i 's/$my_id/'181122','98977','98934','9915','1748','9359','7959'/g' test.hql
Output = (181122,98977,98934,9915,1748,9359,7959)
我试图用单个报价单中的数字替换$my_id。

第一个解决方案:请将您的
sed
更改为以下一次

my_id="your_bash_value"
sed "s/$my_id/'181122','98977','98934','9915','1748','9359','7959'/g"  Input_file
只有当您想在sed内部使用shell变量时,以上内容才有用。由于OP的问题最初不清楚,因此增加了这一点



第二种解决方案:如果您没有传递任何变量,并且文件中实际存在
$
,请尝试以下操作。使用GNU
sed

sed  "s/\\$/'181122','98977','98934','9915','1748','9359','7959'/g" Input_file


第三种解决方案:添加此解决方案,因为OP表示第二种解决方案对他不起作用

sed 's/\$my_id/'"'"'181122'"'"','"'"'98977'"'"','"'"'98934'"'"','"'"'9915'"'"','"'"'1748'"'"','"'"'9359'"'"','"'"'7959'"'"'/g' Input_file


4th Solution:OP告知第三种解决方案对他有效,但对于第三种解决方案,如果OP的新值中有n个
'
值(很难手动添加所有
'“
),并且在其值中有
'
,则生成此新值(用于
sed
by code)请尝试以下操作

在此处首先生成sed可接受的值:

awk -v s1="\"" -v s2="\047" -v val="'181122','98977','98934','9915','1748','9359','7959'" 'BEGIN{value=s2 s1 s2 s1 s2;OFS=",";gsub(/\047/,value,val);print val}'

上面的值将从
'181122'、'98977'、'98934'、'9915'、'1748'、'9359'、'7959'
更改为
'''181122'、''98977''、''98934'、''9915'、'1748'、'9359'、'9359'、'7959''“
输入变量值的格式应与您发布的格式相同。一旦获得该值,请将其粘贴到
sed
命令中并进行替换。

您的示例输入和预期输出是什么?@Ricky Vijay,通过查看您的个人资料,您知道您从未选择任何答案作为正确答案。请在答案不多的时候给出该值。”您的帖子在那里,请选择其中任何一个作为正确答案。您也可以为所有帖子选择正确答案。好的,让我们试试this@RickyVijay,当然,现在检查我的编辑并让我知道?sed:-e expression#1,char 0:以前没有正则表达式-->遇到此错误,请执行以下操作:“s/$rms_id/'181122'、'98977'、'98934'、'9915'、'1748'、'9359'、'7959'/g”测试1。hql@RickyVijay.您应该尝试我的第二个解决方案
sed“s/\\$/'181122'、'98977'、'98934'、'9915'、'1748'、'9359'、'7959'/g”输入文件
,然后告诉我?