sed ubuntu vs mac regexp

时间:2016-10-20 16:59:27

标签: regex bash macos ubuntu sed

我使用sed '1p;/^\s/!d;/^\s*id/d'在ubuntu上使用此正则表达式。它使第一行不受影响,删除空行以及所有不以“空间”开头的行。或以' {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 | 

1 个答案:

答案 0 :(得分:4)

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则是可选的。)