我有一个简单的shell脚本,可以删除文件中的尾随空格。有没有办法使这个脚本更紧凑(不创建临时文件)?
sed 's/[ \t]*$//' $1 > $1__.tmp
cat $1__.tmp > $1
rm $1__.tmp
发布于 2010-12-15 10:39:19
感谢codaddict提出了-i
选项。
以下命令解决了Snow Leopard上的问题
sed -i '' -e's/[ \t]*$//' "$1"
发布于 2010-12-14 18:46:25
您可以在Linux和Unix上使用sed
的就地选项-i
:
sed -i 's/[ \t]*$//' "$1"
请注意,表达式将在OSX上删除尾随的t
(您可以使用gsed
来避免此问题)。它也可能在BSD上删除它们。
如果您没有gsed,下面是OSX上正确的(但难以阅读的) sed语法:
sed -i '' -E 's/[ '$'\t'']+$//' "$1"
三个单引号的字符串最终连接成一个参数/表达式。bash中没有连接运算符,您只需将字符串一个接一个地放在一起,中间没有空格。
$'\t'
在bash中解析为文字制表符字符(使用ANSI-C quoting),因此制表符被正确地连接到表达式中。
发布于 2013-03-15 02:01:56
至少在Mountain Lion上,Viktor的答案也会在行尾去掉字符't‘。以下是解决该问题的方法:
sed -i '' -e's/[[:space:]]*$//' "$1"
https://stackoverflow.com/questions/4438306
复制相似问题