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

时间:2019-01-24 05:32:36

标签: 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。

1 个答案:

答案 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命令中并进行替换。