shell - 如果文件的第一行为空,则删除它

标签 shell unix sed

如果文本文件为空,如何删除文本文件的第一行(!),例如使用sed 或其他标准 UNIX 工具。我试过这个命令:

sed '/^$/d' < somefile

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

根据 Levon 的回答,我基于 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}'

关于shell - 如果文件的第一行为空,则删除它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11226938/

相关文章:

java - 如何将脚本文件包含在jar中

c++ - POSIX/UNIX : How to reliably close a file descriptor

linux - 使用linux命令分隔字符串

bash - sed 挤压多次出现的单词

linux - 如何使用 'sed' 通过 bash 脚本中另一个文件的输出来修改一个文件?

php - 从 file1 file2 获取公共(public)数据的 comm 命令

shell - 使用一个 Bash 命令行更改用户密码

string - 找到模式并将其移至行尾

linux - 如何在多个文件中运行多年和 12 个日历月的时间戳?

linux - 如何找出给定用户的组?