【问题标题】:Replace "?*" with "*" but not "?+" with "*+"将“?*”替换为“*”,但不能将“?+”替换为“*+”
【发布时间】:2018-06-04 11:00:55
【问题描述】:

我在一个文件中有以下字符串:

?*TEST?*
?+

现在我希望将 ?* 替换为星号 *。替换后的文件应该是这样的:

*TEST*
?+

我测试了几种方法,但找不到答案。问题是每个 sed 命令要么将 ?* 替换为 **,要么什么都不替换。

【问题讨论】:

  • 你试过什么?看来sed -e '/TEST/{s/?\*/*?/; s/\*?/?*/; }'做了你想做的事,但你确实没有给出足够的细节。
  • 你说你想用*替换?*,但是你的例子用?*替换了*?。你要哪个?
  • 更换后的输出能否说明一下?
  • 我更正了输入和输出。对于那个很抱歉。为时已晚。

标签: search sed replace


【解决方案1】:

其中一个应该匹配。无论如何?+ 保持不变。

$ echo "$a"
*?TEST?*
?+
*?TEST?*
?+
$ echo "$a" |sed 's/[?][*]/*/g'
*?TEST*
?+
*?TEST*
?+
$ echo "$a" |sed -E 's/([*])([?])/\2\1/g'
?*TEST?*
?+
?*TEST?*
?+
$ echo "$a" |sed 's/[?][*]/***???/g'
*?TEST***???
?+
*?TEST***???
?+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-14
    • 2020-12-30
    • 2011-04-29
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    相关资源
    最近更新 更多