是否有任何工具/ UNIX单行程序可以就地删除多个文件的尾随空格?例如,可与 find 结合使用的字符串。
bzzcjhmw1#
你要
sed --in-place 's/[[:space:]]\+$//' file
这将删除 * 所有 * POSIX标准定义的空格字符,包括垂直制表符和换页符。而且,它只会在尾随空格实际存在的情况下进行替换,这与其他使用零或多个匹配器(*)的答案不同。--in-place只是-i的长格式,我更喜欢在脚本中使用长格式,因为它更能说明标志的实际作用。它可以很容易地与find集成,如下所示:
*
--in-place
-i
find
find . -type f -name '*.txt' -exec sed --in-place 's/[[:space:]]\+$//' {} \+
正如在评论中指出的,如果你没有安装gnu工具,上面的方法就不起作用。如果是这样的话,你可以使用以下方法:
find . -iname '*.txt' -type f -exec sed -i '' 's/[[:space:]]\{1,\}$//' {} \+
pvabu6sv2#
与其他所有需要GNU sed的解决方案不同,这个解决方案可以在任何实现POSIX标准命令的Unix系统上工作。
find . -type f -name "*.txt" -exec sh -c 'for i;do sed 's/[[:space:]]*$//' "$i">/tmp/.$$ && mv /tmp/.$$ "$i";done' arg0 {} +
编辑:这个稍微修改过的版本保留了文件权限:
find . -type f -name "*.txt" -exec sh -c 'for i;do sed 's/[[:space:]]*$//' "$i">/tmp/.$$ && cat /tmp/.$$ > "$i";done' arg0 {} +
f1tvaqid3#
我一直在用这个来修复空白:
while IFS= read -r -d '' -u 9 do if [[ "$(file -bs --mime-type -- "$REPLY")" = text/* ]] then sed -i -e 's/[ \t]\+\(\r\?\)$/\1/;$a\' -- "$REPLY" else echo "Skipping $REPLY" >&2 fi done 9< <(find . \( -type d -regex '^.*/\.\(git\|svn\|hg\)$' -prune -false \) -o -type f -print0)
产品特点:
[:space:]
file
ovfsdjhp4#
不如这样吧:
sed -e -i 's/[ \t]*$//'
顺便说一句,这是一个方便的网站:http://sed.sourceforge.net/sed1line.txt
h79rfbju5#
尝试使用Ex editor(Vim的一部分):
$ ex +'bufdo!%s/\s\+$//e' -cxa *.*
注意:对于递归(bash4 & zsh),可以使用a new globbing option(**/*.*)。通过shopt -s globstar启用。
**/*.*
shopt -s globstar
perl
find . -type f -name "*.java" -exec perl -p -i -e "s/[ \t]$//g" {} \;
根据Spring框架代码样式。
sed
若要使用sed,请检查:How to remove trailing whitespaces with sed?另请参阅:How to remove trailing whitespace of all files recursively?
4dc9hkyq6#
对于那些不是sedMaven的人(包括我自己),我创建了一个小脚本来使用JavaScript正则表达式替换文件中的文本,并在适当的位置进行替换:http://git.io/pofQnQ要删除尾随空格,可以按如下方式使用:
$ node sed.js "/^[\t ]*$/gm" "" file
尽情享受
swvgeqrz7#
由于某种原因,sed和perl命令对我不起作用。
find ./ -type f | rename 's/ +$//g'
感觉也是最直接的一本。
7条答案
按热度按时间bzzcjhmw1#
你要
这将删除 * 所有 * POSIX标准定义的空格字符,包括垂直制表符和换页符。而且,它只会在尾随空格实际存在的情况下进行替换,这与其他使用零或多个匹配器(
*
)的答案不同。--in-place
只是-i
的长格式,我更喜欢在脚本中使用长格式,因为它更能说明标志的实际作用。它可以很容易地与
find
集成,如下所示:如果您使用Mac
正如在评论中指出的,如果你没有安装gnu工具,上面的方法就不起作用。如果是这样的话,你可以使用以下方法:
pvabu6sv2#
与其他所有需要GNU sed的解决方案不同,这个解决方案可以在任何实现POSIX标准命令的Unix系统上工作。
编辑:这个稍微修改过的版本保留了文件权限:
f1tvaqid3#
我一直在用这个来修复空白:
产品特点:
[:space:]
不同),因此它在Windows/DOS风格的文件上工作正常。file
认为是文本文件的文件。ovfsdjhp4#
不如这样吧:
顺便说一句,这是一个方便的网站:http://sed.sourceforge.net/sed1line.txt
h79rfbju5#
x1月0n1x日
尝试使用Ex editor(Vim的一部分):
注意:对于递归(bash4 & zsh),可以使用a new globbing option(
**/*.*
)。通过shopt -s globstar
启用。perl
根据Spring框架代码样式。
sed
若要使用
sed
,请检查:How to remove trailing whitespaces with sed?另请参阅:How to remove trailing whitespace of all files recursively?
4dc9hkyq6#
对于那些不是sedMaven的人(包括我自己),我创建了一个小脚本来使用JavaScript正则表达式替换文件中的文本,并在适当的位置进行替换:
http://git.io/pofQnQ
要删除尾随空格,可以按如下方式使用:
尽情享受
swvgeqrz7#
由于某种原因,
sed
和perl
命令对我不起作用。感觉也是最直接的一本。