删除空白的第一行脚本

时间:2013-01-15 16:07:14

标签: file sed find grep

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

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

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

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

rsync -R $f ../DavidSiteBlankFirst/

2 个答案:

答案 0 :(得分:2)

我会亲自使用sed

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

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

答案 1 :(得分:1)

只需使用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