我正在尝试使用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。
答案 0 :(得分:0)
第一个解决方案: :能否请您将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
第四个解决方案: OP告诉他第三个解决方案适用于他,但如果OP在其新值中具有n个'
值,则第三个解决方案适用于他将很难在其值中添加'"'"'
并手动添加所有'
,然后生成此新值(将通过代码在sed
中使用),请尝试以下操作。 / p>
首先生成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'"'"','"'"'7959'"'"'
输入变量值应与您发布的格式相同。然后,将其粘贴到sed
命令中并进行替换。