我在带有 sed '1p;/^\s/!d;/^\s*id/d'
的 ubuntu 上使用的这个正则表达式.它保持第一行不变,删除空行和所有不以“{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 |
最佳答案
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 是可选的。)
关于regex - sed ubuntu vs mac 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40160302/