regex - sed ubuntu vs mac 正则表达式

标签 regex bash macos ubuntu sed

我在带有 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/

相关文章:

c# - 使用正则表达式提取数据 url

linux - 如何使用 `ls` 在 linux shell 中列出文件,因为它们在相应的文件夹中列出

bash - SVN 日志 - 仅获取评论中带有模式的修订

c++ - 如何在 mac osx 中隐藏终端窗口?

c - 如何使用 "scanf"输入特定字母?

java - 为什么 String.split 会有这样的行为?

linux - aws cli 输出自动发送到 vi

cocoa - 如何使用终端安装 Mac 应用程序

swift - 如何调整或删除标签以使 NSView 重绘成为可能?

JavaScript 正则表达式 - 检查数字匹配的数量