我有很多PHP文件,我想在最后一行(如果不存在)后用bash脚本修复换行符。
是否有任何命令可以轻松实现?
谢谢:)
答案 0 :(得分:3)
tee
是您正在搜索的工具:简单地:
tee -a <<<'' file1 file2 ...
或
find /path -type f -name '*.php' -exec tee -a <<<'' {} +
警告:不要错过-a
选项!
它非常快,但在每个文件上添加换行符。
(您可以在sed '${/^$/d}' -i file1 file2 ...
之类的第二个命令中删除所有文件中所有空的最后一行。;)
......好的,按照要求。
来自man tee
:
NAME tee - read from standard input and write to standard output and files SYNOPSIS tee [OPTION]... [FILE]... DESCRIPTION Copy standard input to each FILE, and also to standard output. -a, --append append to the given FILEs, do not overwrite
tee
会重现,追加(因为选项a
),每个文件作为参数提交, >标准输入。here strings
&#34; (请参阅man -Pless\ +/Here.Strings bash
),您可以使用command <<<"here string""
代替echo "here string"| command
。为此,bash将换行符添加到提交的字符串(即使是空字符串:<<<''
)。由于叉子有限而保持非常快速,但无论如何必须为每个文件分配一个tail -c1
分叉!
find . -type f -name '*.php' -exec bash -c '
for file in $@ ;do
IFS= read -d "" foo < <(tail -c1 $file);
[ "$foo" != $'\''\n'\'' ] && echo >> $file;
done' -- {} +
答案 1 :(得分:1)
遍历所有文件(可以使用find)并通过读取检查尾部最后一个字符(如果是新行 - 对于Windows新行,您可以添加\ r \ n,如果读取返回0,则回显新行到这个档案
for i in *.php; do
tail -c1 ${i} | read -r \n || echo '' >> ${i}
done