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 sed
FreeBSD 不同,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上都是如此)。