';sed-e';和用分號(hào)
分隔多個(gè)命令之間的區(qū)別我可能在這里挑刺,但如果能把這個(gè)一直困擾著我的問題一勞永逸地回答出來,那真是太好了reprex:一號(hào)線。一號(hào)線二號(hào)線三線要一致地向這個(gè)
解答動(dòng)態(tài)
讓我們使用Sed POSIX標(biāo)準(zhǔn)來回答問題。
分號(hào)周圍的間距有什么實(shí)際的區(qū)別嗎?
除{…}、a、b、c、i、r、t、w、:、和#之外的編輯命令后面可以跟分號(hào)、可選空白字符和另一個(gè)編輯命令。
Thus/^$/d;$!G不符合,但/^$/d;$!G是。但我確實(shí)想知道是否有任何現(xiàn)代Sed實(shí)現(xiàn)會(huì)無意中發(fā)現(xiàn)這一點(diǎn)。
上面列出的三種語法之間是否存在任何真正的差異(普遍性、遵從性……)?
No(除了分號(hào)前有空格的,如上所述)簡介:
sed[-n]腳本[文件…]sed[-n]-e腳本[-e腳本]。。。[-f腳本文件]。。。但是,請(qǐng)注意,正如前面提到的,有些命令后面不能跟分號(hào),因此
sed-e':a'-e's/x/y/'-e't a' 是兼容的,而
sed':a;s/x/y;t a' 不是,但至少在GNU Sed中是一樣的。
我的直覺是,在命令行上同時(shí)使用-e和;(…)是多余的。我說的對(duì)嗎?如果你參考問題中的例子,是的。如果只有一個(gè)-eoption,那么只要去掉它就可以了(除非同時(shí)使用-f選項(xiàng)(請(qǐng)參閱概要))。但是in
sed-e':a'-e's/x/y;ta' 同時(shí)存在-e和;但它們不是冗余的。
對(duì)于一些命令來說確實(shí)很重要。
在最初的sed實(shí)現(xiàn)中,:foo;bar,b foo;bar,t foo;bar分別定義、分支、有條件地分支到foo;bar label.
It甚至曾經(jīng)是POSIX所要求的(我是要求放寬要求的人)。
w foo;bar和r foo;bar在所有一致的實(shí)現(xiàn)中仍然要寫入/讀取foo;bar文件。
#命令(用于注釋)、a、I、c(append、insert、,change)顯然不能跟在同一行上的另一個(gè)命令后面。
歷史sed實(shí)現(xiàn)不支持}跟在另一個(gè)命令后面。
POSIX過去常說不能有;在}之前,雖然在實(shí)踐中不需要這樣做(我還要求放寬這一要求)。
sed-e cmd1-e cmd2 意味著等同于2 sed-e'cmd1cmd2' ,但在實(shí)踐中,并非所有的實(shí)現(xiàn)都是這樣:
sed-e'a\'-e'foo\'-e'bar'sed-e's/foo/bar\'-e'baz/g' 例如- End
免責(zé)聲明:
本頁內(nèi)容僅代表作者本人意見,若因此產(chǎn)生任何糾紛由作者本人負(fù)責(zé),概與琴島網(wǎng)公司無關(guān)。本頁內(nèi)容僅供參考,請(qǐng)您根據(jù)自身實(shí)際情況謹(jǐn)慎操作。尤其涉及您或第三方利益等事項(xiàng),請(qǐng)咨詢專業(yè)人士處理。