【问题标题】:Using sed in shell script for replacing values in a file在 shell 脚本中使用 sed 替换文件中的值
【发布时间】:2019-08-25 05:05:03
【问题描述】:

请帮助我创建一个 shell 脚本来搜索所有行并使用 sed 替换文件中的格式。

示例 - 将 [‘abc,xyz’] 更改为 [‘abc’,’xyz’]

【问题讨论】:

  • 如果您询问家庭作业,您应该(1)真诚地尝试首先自己解决问题(在您的问题中包含您的代码)。 (2) 询问您现有实施的具体问题(包括您收到的任何错误)。 (3) 承认问题是家庭作业。 (4) 请注意您的学校政策。 (5) 切勿使用您不理解的代码。见:How do I ask and answer homework questions?
  • 如果输入是“plain, comma-laden, text [‘abc,123’] with more commas, and [‘antelope,zebra’] too”会发生什么——应该映射包含123的方括号,是否应该映射指羚羊和斑马的方括号?只知道一个样本输入和输出是不够的。或者,更确切地说,它鼓励像echo "[‘abc,xyz’]" | sed 's/\[‘abc,xyz’]/[‘abc’,’xyz’]/' 这样的答案,尽管它符合您的要求,但这可能不是您的想法。智能引号‘’ 也很重要吗?替换文本应该是[‘abc’,‘xyz’]吗?

标签: bash shell sed


【解决方案1】:

给你:

[user@myserver ~]$ echo "['abc,xyz']" | sed "s:,:\',\':g"
['abc','xyz']

这里冒号 (:) 用作分隔符,反斜杠 (\) 已用作 sed 命令中的转义字符。

【讨论】:

  • 当单引号出现在双引号内时,无需转义单引号,尽管我认为这不会造成任何伤害。请注意,/ 是斜杠,\ 是反斜杠(或 Unicode 语言中的“solidus”和“reverse solidus”)。您的代码适用于示例数据,但会破坏许多不应被破坏的合理替代输入。例如“echo”Hi, I am happy, and delirious" 不应该被触摸(没有方括号,没有单引号),但你的代码仍然映射了逗号。
  • 我相信他的要求是管理这个给定的场景,所以答案有点中肯。但感谢您的投入。
【解决方案2】:

这可能对你有用(GNU sed):

sed -E ':a;s/(\[('\''[^'\'',]*'\'',)*'\''[^'\'',]*),([^]]*'\''\])/\1'\'','\''\3/;ta' file

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 2013-04-30
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    相关资源
    最近更新 更多