“N”命令如何在sed中工作?

“N”命令如何在sed中工作?,第1张

概述没有序言, $cat in.txt a b c d$sed '=;N' in.txt 1 a b3 c d 看起来像“N”命令在每隔一行工作.也许这是自然的,因为命令’N’加入下一行并更改当前行号.但, $sed 'N;$!P;$!D;$d' thegeekstuff.txt (我看到这个here)  以上示例删除文件的最后两行.这不仅用于偶数编号的文件,还可以使用 没有序言,
$cat in.txt  a b c d$sed '=;N' in.txt 1 a b3 c d

看起来像“N”命令在每隔一行工作.也许这是自然的,因为命令’N’加入下一行并更改当前行号.但,

$sed 'N;$!P;$!D;$d' thegeekstuff.txt

(我看到这个here)
以上示例删除文件的最后两行.这不仅用于偶数编号的文件,还可以使用奇数文件.所以在这个例子中,’N’命令在每行上运行.
有什么区别?
你能告诉我为什么当我运行这样的sed时,我看不到最后一行?

# sed N odd-lined-file.txt
解决方法 摘自信息sed:
`sed' operates by performing the following cycle on each lines ofinput: first,`sed' reads one line from the input stream,removes anytrailing newline,and places it in the pattern space.  Then commandsare executed; each command can have an address associated to it:addresses are a kind of condition code,and a command is only executedif the condition is verifIEd before the command is to be executed....When the end of the script is reached,unless the `-n' option is inuse,the contents of pattern space are printed out to the outputstream,...Unless special commands (like 'D') are used,the pattern space isdeleted between two cycles...`N'     Add a newline to the pattern space,then append the next line of     input to the pattern space.  If there is no more input then `sed'     exits without processing any more commands....`D'     Delete text in the pattern space up to the first newline.  If any     text is left,restart cycle with the resultant pattern space     (without reading a new line of input),otherwise start a normal     new cycle.

这应该几乎解决您的查询.但是我仍然会尝试解释你们三种不同的情况:

情况1:

sed从输入中读取一行. [现在模式空间有一行]
> =打印当前行号.
> N将下一行读入模式空间[现在模式空间中有2行]

>如果没有下一行读取,则在这里退出sed. [即:在奇数行的情况下,sed出现在这里 – 因此最后一行被吞没,无需打印.]

> sed打印图案空间并清理它. [图案空间为空.]
>如果EOF在这里到达sed.否则重新启动步骤1的完整循环.[即:如果偶数行,则sed退出.]

总结:在这种情况下,sed读取2行,并一次打印2行.最后一行被吞下,它有奇数行(见步骤3).

案例2:

sed从输入中读取一行. [现在模式空间有一行]
> N将下一行读入模式空间. [现在模式空间有2行]

>如果它失败退出这里.这只有在有1行时才会发生.

>如果它的最后一行($!)从模式空间打印第一行(P). [图案空间的第一行被打印出来.但是模式空间中仍然有2行.]
>如果它的最后一行($!)从模式空间中删除第一行(D)[现在模式空间中只有一行(第二个)],并从步骤2重新启动命令循环.它因为的命令D(见上面的摘录).
>如果最后一行($),则删除(d)完整的模式空间. [即.达到EOF] [开始此步骤之前,模式空间中有2行现在已被d清除 – 在此步骤结束时,模式空间为空.]
sed自动停止在EOF.

总结:在这种情况下:

sed首先读取2行.
>如果有下一行可读取,打印第一行并阅读下一行.
> else从缓存中删除两行.这样它总是删除最后的2行.

案例3:它与CASE:1相同,只需从其中删除步骤2.

总结

以上是内存溢出为你收集整理的“N”命令如何在sed中工作?全部内容,希望文章能够帮你解决“N”命令如何在sed中工作?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1048132.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存