English 中文(简体)
如何删除多个文件的末端空白?
原标题:How to remove trailing whitespaces for multiple files?

是否有任何工具/ UNIX 单线条可以移除多个文件 < strong > place 的末端白空格 。

例如,可以与 findd 结合使用的。

最佳回答

你想要的

sed --in-place  s/[[:space:]]+$//  file

这将删除 all POSIX 标准定义的白空字符, 包括垂直标签和窗体种子。 而且, 只有当末端的白空间实际存在时, 它才会替换, 不同于使用零或更多匹配符( ) 的其他答案 。

- in-place 仅仅是 -i 的长式。 我更喜欢在脚本中使用长式, 因为它更能说明旗帜的实际作用。

它可以很容易地融入 find 类似 :

find . -type f -name  *.txt  -exec sed --in-place  s/[[:space:]]+$//  {} +

If you re on a Mac

正如在评论中指出的,如果没有安装 Gnu 工具,以上内容就行不通。如果情况如此,您可以使用以下内容:

find . -iname  *.txt  -type f -exec sed -i     s/[[:space:]]{1,}$//  {} +
问题回答

与所有需要 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 {} +

我使用"https://github.com/l0b0/tilde/blob/b1e40e291372767a1b34ef36ef36ed06ae0909a6b88d/.bash_history#L1364" rel="无后退" >此 来修正空白空间:

while IFS= read -r -d    -u 9
do
    if [[ "$(file -bs --mime-type -- "$REPLY")" = text/* ]]
    then
        sed -i -e  s/[ 	]+(
?)$/1/;$a  -- "$REPLY"
    else
        echo "Skipping $REPLY" >&2
    fi
done 9< <(find . ( -type d -regex  ^.*/.(git|svn|hg)$  -prune -false ) -o -type f -print0)

特点:

  • Keeps carriage returns (unlike [:space:]), so it works fine on Windows/DOS-style files.
  • Only worries about "normal" whitespace - If you have vertical tabs or such in your files it s probably intentional (test code or raw data).
  • Skips the .git and .svn VCS directories.
  • Only modifies files which file thinks is a text file.
  • Reports all paths which were skipped.
  • Works with any filename.

不如这样:

sed -e -i  s/[ 	]*$// 

Btw,这是一个方便的网址:http://sed.sourceforge.net/sed1line.txt

ex

尝试使用 < a href=> "https://en.wikipedia.org/wiki/ Ex28text_editor%29" rel=" no follown noreferrer" >Ex编辑 (维姆的一部分):

$ ex + bufdo!%s/s+$//e  -cxa *.*

注:对于循环(bash4 & amp;zsh),您可以使用 < a href="http://www.linuxjournal.com/content/globstar-new-bash-globbing-option" rel= "nofollow noreferrer" > 来使用新的球状选项 (/*. /code>) 。启用 shopt -s globstar

perl

find . -type f -name "*.java" -exec perl -p -i -e "s/[ 	]$//g" {} ;

https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-Code-Style#indentation" rel=“不跟随 nofollow noreferrerr” >Spring框架代码样式 。

sed

使用 sed 时,请检查: 如何用 sed 清除末端白空格?


又见:“https://stackoverflow.com/q/149057/55075>如何反复清除所有文件的末端空白?

对于那些没有设计师(包括我自己)的人,我创建了一个小脚本,用 JavaScript 常规表达式替换文件中的文字,并替换:

http://git.io/pofQnQ" rel="no follow">http://git.io/pofQn/a>

要删除末端空白, 您可以使用它 :

$ node sed.js "/^[	 ]*$/gm" "" file

享受享受

For some reason, the sed and perl commands did not work for me. This did:

find ./ -type f | rename  s/ +$//g 

感觉像最直 向前走的一个也阅读。





相关问题
KornShell- Creating a fixed width text file

I need to create a simple fixed width text file in KornShell (ksh). My current attempt using printf to pad the string isn t working out very well. What s the shortest, cleanest way to create a fixed ...

unix find command

how to use the find command to find files/directories which are not matching the pattern. for eg: find <some options > -name "dontfile.txt" should give me output of all the find whose file ...

encoding of file shell script

How can I check the file encoding in a shell script? I need to know if a file is encoded in utf-8 or iso-8859-1. Thanks

Case insensitive comparison of strings in shell script

The == operator is used to compare two strings in shell script. However, I want to compare two strings ignoring case, how can it be done? Is there any standard command for this?

1. 露台式照像

在Windows XP中,没有一时出现指挥时,是否有办法操作一种灰色文字? 我常常需要把“善待”(工作)与“灰色”同起来,即使我的文字没有产出,......