我有一个文件,foo.txt,包含以下行:
a
b
c
我想要一个简单的命令,导致foo.txt的内容为:
a
b
我有一个文件,foo.txt,包含以下行:
a
b
c
我想要一个简单的命令,导致foo.txt的内容为:
a
b
当前回答
红宝石(1.9+)
ruby -ne 'BEGIN{prv=""};print prv ; prv=$_;' file
其他回答
使用GNU sed:
sed -i '$ d' foo.txt
-i选项在3.95以上的GNU sed版本中不存在,所以你必须使用它作为一个临时文件的过滤器:
cp foo.txt foo.txt.tmp
sed '$ d' foo.txt.tmp > foo.txt
rm -f foo.txt.tmp
当然,在这种情况下,你也可以用head -n -1代替sed。
一样:
在Mac OS X(10.7.4)上,与上面的sed -i命令等价的是
sed -i '' -e '$ d' foo.txt
Mac用户
如果只希望删除最后一行输出而不更改文件本身做
Sed -e '$ d' foo.txt
如果要删除输入文件本身的最后一行
Sed -i " -e '$ d' foo.txt
这两个解都是另一种形式。我发现下面这些更实际、更清晰、更有用:
使用dd:
BADLINESCOUNT=1
ORIGINALFILE=/tmp/whatever
dd if=${ORIGINALFILE} of=${ORIGINALFILE}.tmp status=none bs=1 count=$(printf "$(stat --format=%s ${ORIGINALFILE}) - $(tail -n${BADLINESCOUNT} ${ORIGINALFILE} | wc -c)\n" | bc )
/bin/mv -f ${ORIGINALFILE}.tmp ${ORIGINALFILE}
使用截断:
BADLINESCOUNT=1
ORIGINALFILE=/tmp/whatever
truncate -s $(printf "$(stat --format=%s ${ORIGINALFILE}) - $(tail -n${BADLINESCOUNT} ${ORIGINALFILE} | wc -c)\n" | bc ) ${ORIGINALFILE}
删除zshrc文件中的最后一行,例如:
cat ~/.zshrc
sed -i '' -e '$ d' ~/.zshrc
cat ~/.zshrc
echo -e '$d\nw\nq'| ed foo.txt