Linux 如何仅当bash中存在头文件时才从文件中删除头文件?
我有这个样本文件。我只想在使用bash时删除该文件的第一行(头)Linux 如何仅当bash中存在头文件时才从文件中删除头文件?,linux,bash,shell,sed,Linux,Bash,Shell,Sed,我有这个样本文件。我只想在使用bash时删除该文件的第一行(头) id name job_id 1 john 25 2 adam 45 3 paul 75 您可以使用sed使用-i选项在一次操作中完成此操作(假设您的sed版本支持此操作-并非所有版本都支持)。例如: sed -i.bak -e '1{/^id name job_id/d;}' file 这将获取文件的第1行,并将大括号中的命令应用于该行。大括号搜索显示的图案并删除该线。如果第一行不匹配,则不会将其删除。其他线路保持不变 Ma
id name job_id
1 john 25
2 adam 45
3 paul 75
您可以使用
sed
使用-i
选项在一次操作中完成此操作(假设您的sed
版本支持此操作-并非所有版本都支持)。例如:
sed -i.bak -e '1{/^id name job_id/d;}' file
这将获取文件的第1行,并将大括号中的命令应用于该行。大括号搜索显示的图案并删除该线。如果第一行不匹配,则不会将其删除。其他线路保持不变
Mac OS Xsed
必须使用分号和备份后缀;使用GNUsed
,可以省略其中一个或两个
sed '/id name job_id/d' fileName
编辑:如果头文件存在,则仅检查第一行并在新文件中打印其余部分。否则,原稿将保持不变。您也可以使用awk执行此操作:
awk 'NR!=1||$0!="id name job_id" {print $0}' file > newfile
这将删除它,即使它不是第一行。是的,此答案不正确,请删除它。虽然它可能会起作用,但解决方案不应该对文件的内容进行假设,而将此作为答案可能会误导未来的访问者。另外,使用sed已经有了一个正确的答案。这不也会删除第一行之后包含该模式的任何行吗?我在bash中尝试了它(在您的评论之后再次尝试),但它似乎工作正常。我的回答是仓促的,因为它不只是第一行,我应该这样做,但我几乎可以肯定它基本上完成了任务;如果标题重复,也会消除重复,这严格来说不是问题要求的。有一个答案是使用
sed
(目前)有两张反对票,但也有同样的问题。可以说,在过滤命令中应该有一个-x
(也可以将临时文件重命名为原始文件)。哦,我想我出于某种原因误读了你的原始评论。是的,会的。我会修好的。
if head -1 original.txt | grep -Fxq 'id name job_id'
then tail -n+2 original.txt > newdoc.txt
fi
awk 'NR!=1||$0!="id name job_id" {print $0}' file > newfile