Sed regex problem on Mac, works fine on Linux
这在Linux(Debian)上工作正常:
1 | sed -e 's,^[ \t]*psd\(.*\)\;,,' |
在Mac上,我认为我必须使用
1 | sed -E 's,^[ \t]*psd\(.*\)\;,,' |
号
但是regexp不匹配,因此不会删除我想要的行。
关于如何解决这个问题有什么建议吗?
样本输入:
1 2 3 4 5 | apa bepa psd(cepa); depa psd(epa); psd(fepa gepa hepa); |
对于该输入,预期输出为:
1 2 3 | apa bepa depa psd(epa); |
。
复制示例输入后:
1 2 3 4 5 | [~ 507] pbpaste | sed -e 's,^[[:space:]]*psd\(.*\);,,' apa bepa depa psd(epa); |
为了匹配
同样的问题也可能发生在AIX、Solaris和HP-UX或其他Unix中。
或者,您可以使用SED的GNU版本,而不是Mac OSX提供的实现。
MAC端口为它提供一个端口
除了上面的答案,您还可以利用一个有用的(但依赖于外壳的)技巧。在bash中,使用
埃多克斯1〔14〕
请注意,整个SED表达式现在是如何由三个连接的字符串组成的。
如果您特别需要制表符,而不匹配其他空白(即当
我在我的机器上检查了这个示例输入,当第三行中的制表符从行首开始,regexp
1 | sed -E 's,^[[:blank:]]*psd\(.*\)\;,,' demo.txt |
号
这将产生以下输出:
1 2 3 4 | apa bepa depa psd(epa); |
但这会导致空行。为了获得您预期的准确输出,我使用了以下方法:
1 | sed -n '/^[[:blank:]]*psd\(.*\)\;/!p' demo.txt |
。
结果:
1 2 3 | apa bepa depa psd(epa); |
这只是匹配模式的反向输出(
编辑:为了匹配sed(macosx)中regexp中的制表符,您还可以尝试如何在os x中插入sed中的制表符?