删除文件的第一行,如果它是空的(Delete first line of file if it

2019-07-30 03:34发布

如何删除一个文本文件中的第一个(!)行,如果它是空的,例如使用sed的或其他标准的UNIX工具。 我想下面的命令:

sed '/^$/d' < somefile

但是,这将删除第一个空行,而不是文件的第一行,如果它是空的。 我可以给sed的一些条件,就行号?

随着列翁的答案,我建立了基于awk的这个小脚本:

#!/bin/bash

for FILE in $(find some_directory -name "*.csv")
do
    echo Processing ${FILE}

    awk '{if (NR==1 && NF==0) next};1' < ${FILE} > ${FILE}.killfirstline
    mv ${FILE}.killfirstline ${FILE}

done

Answer 1:

在sed最简单的事情是:

sed '1{/^$/d}'

请注意,这并不删除包含所有空白的行,但只包含什么,但单个新行线。 为了摆脱空白:

sed '1{/^ *$/d}'

并消除所有空白:

sed '1{/^[[:space:]]*$/d}'


Answer 2:

使用SED,试试这个:

sed -e '2,$b' -e '/^$/d' < somefile

或使到位的变化:

sed -i~ -e '2,$b' -e '/^$/d' somefile


Answer 3:

如果你没有这样做原地的,你可以使用awk和输出重定向到不同的文件。

awk '{if (NR==1 && NF==0) next};1' somefile

这将打印文件的内容,除非它的第一行( NR == 1 ),它不包含任何数据( NF == 0 )。

NR当前行号, NF由空格/制表符分隔的上一个给定的行中的字段的数目

例如,

$ cat -n data.txt
     1  
     2  this is some text
     3  and here
     4  too
     5  
     6  blank above
     7  the end

$ awk '{if (NR==1 && NF==0) next};1' data.txt | cat -n
     1  this is some text
     2  and here
     3  too
     4  
     5  blank above
     6  the end

cat -n data2.txt
     1  this is some text
     2  and here
     3  too
     4  
     5  blank above
     6  the end

$ awk '{if (NR==1 && NF==0) next};1' data2.txt | cat -n
     1  this is some text
     2  and here
     3  too
     4  
     5  blank above
     6  the end

更新

sed解决方案还应该就地更换工作:

sed -i.bak '1{/^$/d}'  somefile

原始文件将保存与.bak扩展



Answer 4:

删除所有文件的第一行实际的目录下,如果第一行是空的:
find -type f | xargs sed -i -e '2,$b' -e '/^$/d'



Answer 5:

这可能会为你工作:

sed '1!b;/^$/d' file


文章来源: Delete first line of file if it's empty
标签: shell unix sed