2011-05-03 63 views

回答

2
# cat test 
a 
b 
c 
# head -n -1 < test 
a 
b 
+0

不错,但不适用于所有版本的'head'(确定:GNU;不行 - MacOS X,AIX,...)。 OTOH,当末尾有多行删除时,它比'sed'好。 – 2011-05-03 19:18:26

3
sed '$d' <<! 
a 
b 
c 
! 

请注意,这个作品非常便携为“删除最后一行”的具体情况。当N> 1时,它不适用于'删除最后N行';在那一点上,sed可能不是正确的工具。

使用head -n -N的作品,如果你使用的head GNU的版本 - 它不head(AIX,MacOS X系统,...)的大多数其它版本。

这个Perl代码的工作原理 - 它可能也可以使用Python编写而不用大惊小怪。

#!/usr/bin/env perl 
use strict; 
use warnings; 
use constant N => 10; 

my(@lines); 

while (<>) 
{ 
    print shift @lines while (scalar(@lines) >= N); 
    push @lines, $_; 
} 

读者练习:升级代码为10

+0

谢谢乔纳森。 – srihari 2011-05-03 20:13:03

0

可能不是世界上最好的脚本来处理,而不是硬编码命令行选项指定的N的值,但在这里云:

Usage: script_name.sh {original_file} {copy_file}

#!/bin/bash 

if [ $# -ne 2 ] 
then 
    echo "Usage: $0 {original_file} {copy_file}" 
    exit $E_BADARGS 
fi 

lines=`wc -l $1` 
num_lines=`echo ${lines:0:1}` 

if [ $num_lines -ne 0 ] 
then 
    last_line=${num_lines-1} 
    sed "${last_line}d" < $1 > $2 
else 
    echo "The file is empty!" 
fi 

exit 0 
+0

谢谢你bacchus – srihari 2011-05-03 20:11:19

+0

@srihari不客气! – bacchus 2011-05-03 20:14:49

相关问题