![Korn shell 的 for 循环和 while 循环哪个更好](https://linux22.com/image/122595/Korn%20shell%20%E7%9A%84%20for%20%E5%BE%AA%E7%8E%AF%E5%92%8C%20while%20%E5%BE%AA%E7%8E%AF%E5%93%AA%E4%B8%AA%E6%9B%B4%E5%A5%BD.png)
我有一个文件 file_list.txt,其中包含要处理的文件名列表。对于 file_list.txt 中存在的所有文件,我必须删除尾随空格和额外的换行符。我怎样才能做到这一点。使用 while 循环会更好还是使用 for 循环更好?
答案1
如果是关于编辑的内容file_list.txt
,你会使用文本编辑工具,而不是 shell 循环, 喜欢:
sed 's/[[:space:]]*$//; # remove trailing whitespace
/./!d; # remove empty lines' < file_list.txt > new_file_list.txt
或者进行就地编辑:
perl -nli.back -e 's/\s+$//;print if /./' file_list.txt
(.back
如果不需要原件的备份副本,请删除)。
如果file_list.txt
包含文件列表,并且您要编辑这些文件的内容,那么循环也不是理想的选择,除非您确实想为每个文件运行一个编辑命令。
如果 的内容file_list.txt
与输入格式兼容xargs
,即文件名以空格(包括换行符)分隔,并且双引号、单引号或反斜杠可以转义空格和彼此(允许任何字符),那么您可以这样做:
xargs < file_list.txt perl -nli.back -e 's/\s+$//;print if /./' --