【发布时间】:2019-09-03 23:13:19
【问题描述】:
我看到一个sed命令删除最后10行数据:
sed -e :a -e '$d;N;2,10ba' -e 'P;D'
但我不明白它是如何工作的。谁能帮我解释一下?
更新:
这是我对这个命令的理解:
- 第一个脚本表示定义了一个标签“
a”。 - 第二个脚本表示它首先确定是否
当前读取模式空间的行是最后一行。如果是,
执行“
d”命令将其删除并重新开始下一个循环;如果 不,跳过“d”命令;然后执行“N”命令:追加一个新的 从输入文件到模式空间的行,然后执行 “2,10ba”:如果当前读取模式空间的行是一行 在第 2 到第 10 行,跳转到标签“a”。 - 第三个脚本表明如果当前读入的行
模式空间不是第2行到第10行,先执行“
P”命令:第一行 在模式空间打印,然后执行“D”命令:模式的第一行 空间被删除。
我对“$d”的理解是,“d”会在sed将最后一行读入模式空间时执行。但似乎每次执行“ba”时,都会执行“d”,而不管读入pattern space的当前行是否是最后一行。为什么?
【问题讨论】:
-
对于不清楚的部分,请更具体地询问,并尽可能自己解释。照原样,您的问题基本上要求提供教程。
-
您有 RTFM 或查看任何资源吗?有一些不错的,比如grymoire.com/Unix/Sed.html ...
-
检查我更新的答案。
d实际上只执行一次,但它会删除最多可容纳 10 行的整个模式空间。 -
我明白了,@choroba,你的解释很清楚。,谢谢。
标签: sed