【问题标题】:sed ubuntu vs mac regexpsed ubuntu vs mac 正则表达式
【发布时间】:2017-03-02 19:12:28
【问题描述】:

我在 ubuntu 上使用 sed '1p;/^\s/!d;/^\s*id/d' 的这个正则表达式。它保持第一行不变,删除空行和所有不以“{space}”开头或以“{blank}id”开头的行。在 mac 上,它只留下第一行。 regexp 在 mac 上的外观应该如何? 示例 test.csv

   id  | code | color_code | 
-------+------+------------+
 11A00B|  15  | 9129102    |
 11A00C|  16  | 9129103    |
(2 rows)

   id  | code | color_code | 
-------+------+------------+
 11B00B|  25  | 9129152    |
 11B00C|  36  | 9129162    |
(2 rows)

   id  | code | color_code | 
-------+------+------------+
 11C00B|  22  | 9129107    |
 11C00C|  9   | 9129108    |
(2 rows)

在我打电话给sed -i '1p;/^\s/!d;/^\s*id/d' test.csv之后 在ubuntu上

   id  | code | color_code | 
 11A00B|  15  | 9129102    |
 11A00C|  16  | 9129103    |
 11B00B|  25  | 9129152    |
 11B00C|  36  | 9129162    |
 11C00B|  22  | 9129107    |
 11C00C|  9   | 9129108    |

在 Mac 上

   id  | code | color_code | 

【问题讨论】:

  • 一个更好的解决方法是更改​​生成这些表格的程序以不装饰表格。这看起来基本上是 stackoverflow.com/questions/9934264/… 的副本
  • 我无权访问该程序。这是第 3 方之一。
  • 它确实看起来像是在幕后调用 Postgres。您可以尝试使用包装器来隐藏 psql 或类似的东西,但这已经远远超出了您最初问题的范围。

标签: regex bash macos ubuntu sed


【解决方案1】:

Ubuntu 使用 GNU sed,而 OS X 使用 BSD sed。快速的答案是\s 是识别空白的 GNU 扩展;使用标准 [[:space:]] 代替它,您的命令将适用于两者。

sed -i "bak" '1p;/^[[:space:]]/!d;/^[[:space:]]*id/d' test.csv

(另一个区别是 BSD sed 需要带有 -i 选项的后缀,而对于 GNU 是可选的。)

【讨论】:

  • 谢谢。正是我需要的。
猜你喜欢
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-19
  • 2017-07-28
相关资源
最近更新 更多