【问题标题】:replacing numbers separated by single quotation marks ( ' ' ) using sed command [closed]使用 sed 命令替换由单引号 ( ' ' ) 分隔的数字 [关闭]
【发布时间】:2019-01-24 05:32:35
【问题描述】:

我正在尝试在文件中使用 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 替换为单引号中的这些数字。

【问题讨论】:

  • 您的样本输入和预期输出是什么?
  • @Ricky Vijay,通过查看您的个人资料得知您从未选择任何答案作为正确答案。给它一些时间,当你的帖子的答案很少时,选择其中任何一个作为正确答案。你也可以为你的所有帖子这样做。

标签: shell sed


【解决方案1】:

第一个解决方案:您能否将您的 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


第 4 个解决方案: OP 告诉他第 3 个解决方案对他有效,但如果 OP 在他的新值中有 n 个 ' 值(这将是很难手动添加 '"'"' 和所有它们),它们的值中有 ' 然后生成这个新值(通过代码在 sed 中使用)尝试跟随。

首先在这里生成 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 命令中并进行替换。

【讨论】:

  • 好的,试试这个
  • @RickyVijay,当然,现在检查我的编辑并告诉我?
  • sed: -e expression #1, char 0: no previous regular expression --> 得到这个错误
  • sed "s/$rms_id/'181122','98977','98934','9915','1748','9359','7959'/g" test1.hql跨度>
  • @RickyVijay。你应该试试我的第二个解决方案sed "s/\\$/'181122','98977','98934','9915','1748','9359','7959'/g" Input_file 并告诉我?
猜你喜欢
  • 1970-01-01
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2020-03-27
相关资源
最近更新 更多