删除空白的第一行脚本



我有这个脚本,它打印出第一行为空的文件:

for f in `find . -regex ".*.php"`; do 
  for t in head; do 
    $t -1 $f  |egrep '^[  ]*$' >/dev/null && echo "blank line at the $t of $f"; 
  done; 
done

我如何改进这一点,以实际删除空行,或者至少复制所有的文件与空白的第一行到其他地方。

我尝试使用this进行复制,这很好,因为它复制保留了目录结构,但它复制的是每个php文件,我需要捕获egrep的正输出并只复制这些文件。

rsync -R $f ../DavidSiteBlankFirst/

我个人会使用sed

find ./ -type f -regex '.*.php' -exec sed -i -e '1{/^[[:blank:]]*$/d;}' '{}' ;

查找所有以.php结尾的常规文件,并执行sed命令,该命令只在第一行工作,检查其是否为空,如果为空则将其删除,文件中的其他空行不受影响。

仅使用findsed:

find . -type f -name "*.php" -exec sed -i '1{/^s*$/d;q;}' {} ;

-type f选项只能找到文件,而不是我希望你会用.php后缀命名文件夹,但这是一个很好的做法。使用-regex '.*.php'是多余的,使用全局化的-name "*.php"会更混乱。使用find的-exec而不是shell脚本,sed脚本将对find传递的每个匹配文件进行操作。

sed脚本只查看第一行1,并将{}中的操作应用于该行。我们检查行是否为空/^s*$/,如果行匹配,我们删除d它并退出q脚本,这样就不会读取文件中的所有其他行。-i选项将更改保存回文件,因为sed的默认行为是打印到stdout。如果您希望生成回档,请使用-i~,这将为file创建一个回档file~

相关内容

  • 没有找到相关文章

最新更新