如何删除一个文本文件中的第一个(!)行,如果它是空的,例如使用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
在sed最简单的事情是:
sed '1{/^$/d}'
请注意,这并不删除包含所有空白的行,但只包含什么,但单个新行线。 为了摆脱空白:
sed '1{/^ *$/d}'
并消除所有空白:
sed '1{/^[[:space:]]*$/d}'
使用SED,试试这个:
sed -e '2,$b' -e '/^$/d' < somefile
或使到位的变化:
sed -i~ -e '2,$b' -e '/^$/d' somefile
如果你没有这样做原地的,你可以使用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
扩展
删除所有文件的第一行实际的目录下,如果第一行是空的:
find -type f | xargs sed -i -e '2,$b' -e '/^$/d'