【问题标题】:Unix Shell Scripting removing - from fileUnix Shell 脚本从文件中删除
【发布时间】:2017-01-25 22:11:36
【问题描述】:

我有一个包含以下信息的文件

job, cost_code, laborcost,materialcost       
202-12-21, 23-94-23, **110.00-**, 120.04    
204-12-21, 23-93-23, 520.00, **120.04-**    
204-12-12, 24-93-23, 155.00, **120.04-**

很少有问题记录,特别是在行尾带有 - 符号的问题记录(标有**,但文件中并不存在)。

我正在尝试使用正则表达式删除 - 符号,但我无法仅匹配有问题的数量。

【问题讨论】:

  • tr 不适合这个,它只能用于到处删除或替换-

标签: regex shell unix sed tr


【解决方案1】:

试试这个,这个命令会删除行尾的破折号

sed s'/-$//'
echo "204-12-21, 23-93-23, 520.00, 120.04-" | sed s'/-$//'

【讨论】:

    【解决方案2】:

    你可以使用sed:

    sed -i~ 's/\([0-9]\)-,/\1,/g;s/-$//' input.csv
    

    第一个表达式找到一个数字后跟-,,并将其替换为数字和逗号;第二个表达式删除行尾的破折号。

    【讨论】:

    • 非常感谢
    • 由于某种原因,该命令不适用于行项目的末尾,我尝试了不同的变体,但仍然没有任何想法?
    • 为我工作。请提供更多详细信息。
    【解决方案3】:

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

    sed -r 's/-(,|$)/\1/g' file
    

    从行的最后一个字段中删除逗号或连字符之前的连字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-10
      • 2017-07-09
      • 1970-01-01
      相关资源
      最近更新 更多