FILE.TXT
Start
1
2
3
4
Start
5
6
7
8
我正在利用sed来解决从Start
之间获取数据的不同方法。
我制作的一个剧本是
sed ':2;h;$!N;$b1;/\n.*Start[^\n]*$/{:1;$!x;/5/p;x;s/.*\n//};$!b2;d'
脚本说明
:2 #A label for the break point
;h #Hold all the lines currently in the pattern buffer, i use this before getting the next line so that it doesn't have the next start.
;$!N # Gets the next line for every line except the last
;$b1 # Breaks to label 1 on the last line. This is to bypass having to see start to enter the block
;/\n.*Start[^\n]*$/ # If start is on the last line of pattern buffer then execute the next block
{ #Start of block
:1 #Label to jump to if end of file
;$!x # If not the last line switch in the hold buffer we got which doesn't include the next `Start`.
;/5/p # Print if this Start section contains `5`
;x #Switch back hold buffer and pattern to get `Start` back
;s/.*\n// #Delete everything up to last line of pattern buffer(leaving just `Start`.
} # End block
;$!b2 # If not end of file go back to label at the start
;d #Deletes anything left in pattern buffer when we reach the end of the file
输出
Start
5
6
7
8
哪个是正确的
但是将$!N;$b1;
的顺序更改为$b1;$!N
会使脚本输出任何内容。
sed ':2;h;$b1;$!N;/\n.*Start[^\n]*$/{:1;$!x;/5/p;x;s/.*\n//};$!b2;d'
我不知道我是否遗漏了一些明显的东西,或者我并不真正理解$
的含义,但在我看来,这似乎没有任何区别。命令只在最后一行($
)上执行,而另一行在所有其他行上执行,所以顺序不应该重要吗?
欢迎任何解释,如果需要更多信息,请告诉我。
此外,我不想要一个更好的方法,我只想解释它为什么会发生。
答案 0 :(得分:1)
var query = new SQLiteCommand("select name,latitude,longitude,country_code,feature_code from geoloc order by ((latitude - @lat) * (latitude - @lat) + (longitude - @lng) * (longitude - @lng)) LIMIT 1, cn);
在最后一次添加之前的行,然后是分支(因为它现在是最后一行),whe $!N;$b1
不分支,追加,不进入块。以下是$b1;$!N
未采用,后跟$!b2
删除模式。 (并且结束脚本,因为没有更多输入) - Hasturkun