Answers:
是的,有很多不同之处,就是我唯一知道的行为-i。
我从未使用过BSD,因此我无法真正提供详细信息,但可以使用tr替代方法:
tr '\t' , < inputFile.txt > outputFile.csv
令人愉快的副作用是tr应该明显更快。我在Linux上使用具有50000行的测试文件进行了测试,每行都有2个选项卡:
$ time tr '\t' , < foo.txt > /dev/null
real 0m0.004s
user 0m0.000s
sys 0m0.000s
$ time sed 's/\t/,/g' foo.txt > /dev/null
real 0m0.039s
user 0m0.036s
sys 0m0.000s
tr '\t' ,比tr $'\t' ,。tr '[\t]' '[,]'甚至可以移植到某些旧的SysV系统。
是的,与GNU sedFreeBSD 不同,FreeBSD sed不会解释\t正则表达式中的ANSI C转义序列。
在这种情况下,获得最不常见的去噪器的一种方法是使用printf。
tab="$(printf '\t')"
printf '\t\n' | sed 's/'"${tab}"'/,/g'
printf '\t\n' | sed 's/'"$(printf '\t')"'/,/g'
sed -i如果开关或选项紧随-i开关之后,就可以使就地文件编辑的行为兼容,例如sed -i -e 's/x/X/g' file既适用于GNU sed也适用于FreeBSD sed。
FreeBSD的最新版本sed(FreeBSD 8.1或更高版本)已进行了-r切换,以提高与GNU的兼容性sed。
(此外,在sed正则表达式中使用POSIX字符类也是确保兼容性的好方法)。
有关POSIX兼容sed实现的替代方案,请参见:最小化-一种更小,更便宜,更快的SED实现。
-E选项可以解决问题(在FreeBSD和Mac OS X上都是如此)。