UNIX sed命令帮助

时间:2011-06-24 22:45:01

标签: unix sed

    sed -n '$'!p abc.txt | tail +2 > def.txt

我在我的代码中有上面提到的sed命令 - 我无法弄清楚它的作用 - 我正在通过sed教程找到它但是我无法 - 有人可以帮我弄清楚它是什么它确实 - 谢谢

2 个答案:

答案 0 :(得分:2)

分阶段进行:

sed -n abc.txt    

“通过sed运行abc.txt,但不要打印任何内容。”

sed -n '$!p' abc.txt

(请注意,我已经纠正了我认为错误的引号。)

“通过sed运行abc.txt;如果一行不是最后一行,则打印它(即打印除最后一行以外的所有行)。”

我想你知道其他的,但请注意tail +2是过时的语法 - tail -n 2会更好。

修改:

要删除最后两行,请尝试

sed 'N;$d'

或者如果这不起作用,粗糙但有效:

sed '$d' | sed '$d'

答案 1 :(得分:2)

sed命令'$'!p而言:

  • $仅匹配输入文件的最后一行。
  • !否定了匹配的意义(因此它匹配所有最后一行)。
  • p打印出匹配的内容。

所以基本上这会打印除文件的最后一行以外的所有内容。

-n选项阻止sed执行默认操作(打印模式空间) - 如果没有,您将获得最后一行的一个副本和所有其他行的两个副本

$周围的引号是为了阻止shell尝试将其解释为shell变量 - 我会自己引用该批次('$!p')但这是一个样式问题,至少在{ {1}}。其他shell如bash(使用csh进行命令历史检索)可能不那么宽容。