【问题标题】:How do I remove a piece of a string using sed?如何使用 sed 删除一段字符串?
【发布时间】:2020-04-17 00:51:15
【问题描述】:

我需要将所有出现的“StoreId...”替换为商店编号带前导零的商店编号而不带前导零。我已经使用以下方法成功完成了:

sed -i '/StoreId=\"0022\"/c\StoreId=\"22\"' $1

但是这样做太糟糕了,因为我需要为每个商店编号添加一行,并且脚本将循环遍历每个 sed 语句……它只需要很长时间。

我想要这样一行:

StoreId="0343"

然后像这样重写它:

StoreId="343"

(或 StoreId="0030" 到 StoreId="30")

基本上我只想将前导零放在一行中。我尝试通读 SED 手册,但我不够聪明。任何帮助将不胜感激。

【问题讨论】:

  • 看起来像 HTML 或 XML。您能否粘贴更好的示例输入和预期输出?

标签: bash sed


【解决方案1】:

您不需要匹配前导零之后的任何内容。

sed -i -r 's/StoreId="0+/StoreId="/' "$1"

0+ 匹配至少 1 个0 字符的序列。

【讨论】:

  • 注:如果 ID 应该为零,这将删除所有零并留下一个空字符串。但是使用 GNU sed 命令sed -Ei 's/(StoreId=")0+\B/\1/' file只会删除前导零。
  • @potong 好点,尽管在这种情况下0 可能不是一个可能的商店 ID。事物的 ID 通常从 1 开始。
猜你喜欢
  • 2017-05-28
  • 2020-11-03
  • 1970-01-01
  • 2013-05-09
  • 2018-08-27
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
相关资源
最近更新 更多