【问题标题】:Using sed to check make sure each line only has numbers and a comma?使用 sed 检查确保每行只有数字和逗号?
【发布时间】:2016-12-09 08:58:06
【问题描述】:

我有一个如下所示的文本文件:

0,16777215
16807368,16807368
621357328,621357328
621357403,621357403
1380962773,1380962773
1768589474,1768589474

有没有办法使用sed 来确保每一行只有数字和一个逗号?如果一行缺少逗号、包含字母、为空白、有空格等 - 那么我想删除它。

【问题讨论】:

  • 如果它只有一个逗号怎么办?还是仅在逗号一侧的数字?>
  • 提供可验证的输入和预期的输出。
  • 它应该总是有一个逗号,每边至少有1个数字。
  • @123 此外,空行也应该被删除(因为显然没有逗号或数字)。
  • @Andrew sed '/^[0-9]\{1,\},[0-9]\{1,\}$/!d'

标签: bash sed


【解决方案1】:

sed:

sed -nr '/^[0-9]+,[0-9]+$/p' File

就地编辑文件:

sed -nri '/^[0-9]+,[0-9]+$/p' File

便携式解决方案:

sed -nE '/^[0-9]+,[0-9]+$/p' File

【讨论】:

  • -r 是 GNU 特定的。 -E 对 GNU sed 做同样的事情,也适用于其他 sed。所以为了可移植性,使用-E 而不是-r
  • 感谢 Ed.. 我以前从未真正使用过 -E。
【解决方案2】:
sed -e '/^[0-9]\+,[0-9]\+$/ !d' file

地址是一个正则表达式。如果该行与正则表达式不匹配,则应用d(删除)命令。 (感叹号 (!) 反转条件。)

【讨论】:

    猜你喜欢
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 2014-06-25
    相关资源
    最近更新 更多