- 論壇徽章:
- 0
|
請問sed的P命令和D命令的用法
理解
$!N 如果不是最后一行,就讀入新行附加于pattern space之后,以“\n”分隔
理解
s/\n=/ / 如果發(fā)現(xiàn)了新行是以=開頭的,替換為空格
理解
ta 如果找到了替換,從標簽a處再執(zhí)行,否則向下走
不理解,這條命令有分條件執(zhí)行嗎?為什么說“如果找到替換再到a執(zhí)行”,s命令后不是都要執(zhí)行ta這條命令嗎,哪個命令指定這條ta是根據(jù)s的結(jié)果來處理的?
P 打印 pattern space中的第一個 \n之前的內(nèi)容
D 刪除pattern space中的第一個 \n之前的內(nèi)容,并返回腳本頭部執(zhí)行
理解
第一行執(zhí)行,沒有找到 \n= 打印第一行,讀入第二行,腳本頭部執(zhí)行
是不是先定義標號a,然后N讀入下一行,然后執(zhí)行s替換,因為沒有找到替換,所以不執(zhí)行ta?然后打印模式空間中\(zhòng)n前面內(nèi)容,就是第一行,再刪除模式空間\n前面內(nèi)容即第一行,保留第二行。
第二行執(zhí)行,找到 \n= ,替換為空格,從標簽a處再執(zhí)行
第三行執(zhí)行,沒有找到 \n= 打印第二三行的合并和第四行,讀入新行,沒有了,結(jié)束。
此時模式空間里面是第二行。先定義標號a,然后N讀入下一行(第三行),然后執(zhí)行s替換,這時\n就沒有了,模式空間是2、3行的合并,然后ta,再N讀入下一行(第四行),然后執(zhí)行s替換,因為沒有找到替換,所以不執(zhí)行ta,然后打印模式空間中\(zhòng)n前面內(nèi)容,就是二、三行的合并,刪除后保留第四行。
這時再執(zhí)行sed,定義標號a,發(fā)現(xiàn)是最后一行,所以N,s,t三個命令都不執(zhí)行,執(zhí)行P;D命令,打印第四行,再刪除模式空間的內(nèi)容。
我的理解對嗎?
問題:N命令是由前面的$!決定是否執(zhí)行的,這個我理解。s命令的執(zhí)行條件是什么?是不是前面的N執(zhí)行成功s才執(zhí)行?t命令的執(zhí)行條件是不是s命令成功才執(zhí)行?-e :a和-e'P;D'是不是不管什么條件都執(zhí)行?
請大蝦賜教! |
|