【问题标题】:Keep spaces when using sed command in kornshell script在 kornshell 脚本中使用 sed 命令时保留空格
【发布时间】:2016-05-18 17:45:53
【问题描述】:

我在使用 sed 命令时遇到了一些问题:

我想用两个单引号替换一个字符串,一个单引号
这是我的字符串:

04CA07807800106109XE00187200000081960          NI         0780643442        178'0700

我用这个 sed 命令替换了单引号:

line=`echo $line | sed "s/'/''/g"`

结果是

04CA07807800106109XE00187200000081960 NI 0780643442 178''0700

如您所见,单引号已正确替换为两个单引号。
但是我丢失了字符串中每个字符之间的所有空格,我真的需要保留它们。

有没有办法用 sed 命令保留这些空格?
我尝试使用 tr 命令,得到了相同的结果。

感谢您的帮助。

【问题讨论】:

  • 顺便说一句,printf '%s\n' "$line" 在处理任意输入时实际上比echo "$line" 更正确(它本身比echo $line 更正确)——参见@987654321 的应用程序部分@
  • ...顺便说一句,shellcheck.net 会为您找到此错误,而无需人工参与。
  • 我不知道这些东西。妥当注明。谢谢!

标签: bash shell sed spaces quote


【解决方案1】:

问题不是 sed 命令,而是您的未引用变量。使用:

line=`echo "$line" | sed "s/'/''/g"`

未加引号的变量导致word splitting 导致echo 的多个参数,从而导致单个空格单词。

【讨论】:

  • "未加引号的变量正在将所有多个空格合并为一个。"有点儿。它经历了word splitting,这导致echo 的多个参数,每个参数都没有空格。
  • 谢谢,我编辑了答案,并从您的评论中得到了更正确的解释。
  • 其实很简单!谢谢你们的帮助:)
猜你喜欢
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 2018-08-17
  • 2014-02-04
相关资源
最近更新 更多