亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 7847 | 回復(fù): 17
打印 上一主題 下一主題

請問sed的P命令和D命令的用法  關(guān)閉 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2004-03-10 10:14 |只看該作者 |倒序瀏覽
sed大寫的P命令和D命令的用法我不明白?戳薽an,上面寫:
D          Deletes the initial segment of the pattern space through the first  newline and starts the next cycle.
P          Prints (copies) the initial segment of the pattern space through the  first        newline        to the standard        output.
但是里面那句through the first  newline 看不懂,是什么意思?newline指的是什么?還有initial segment 指的又是什么?誰能結(jié)合一些例子講解一下?

論壇徽章:
0
2 [報告]
發(fā)表于 2004-03-18 17:30 |只看該作者

請問sed的P命令和D命令的用法

這帖子沉到底了。頂上來。
請sed達人就以下例子為我解釋一下:
6.按關(guān)鍵字拼接行
如果某行以=開始,則合并到上一行并替代=為空格

代碼:
sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'

舉例
代碼:
cat file
111111111111111111
222222222222222222
=333333333333333333
444444444444444444

sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D' filename
111111111111111111
222222222222222222 333333333333333333
444444444444444444

如果不加-e'P;D',那么后面的以“=”號開頭的行都不會合并上來,可是我不理解-e'P;D'的意思,請高手解釋一下。

論壇徽章:
0
3 [報告]
發(fā)表于 2004-03-18 17:40 |只看該作者

請問sed的P命令和D命令的用法

見ad版主的sed學習日記:
http://72891.cn/forum/viewtopic.php?t=166936&highlight=admirer

論壇徽章:
0
4 [報告]
發(fā)表于 2004-03-18 18:11 |只看該作者

請問sed的P命令和D命令的用法

我這個例子就是從那篇帖子里面抄的呀,但是這個例子還是沒有看懂。能不能結(jié)合這個例子解釋一下?

論壇徽章:
0
5 [報告]
發(fā)表于 2004-03-18 18:55 |只看該作者

請問sed的P命令和D命令的用法

我來試著解釋一下,如有不妥,請見諒。
-e :a 定義一個標簽位置
$!N   如果不是最后一行,就讀入新行附加于pattern space之后,以“\n”分隔
s/\n=/ /  如果發(fā)現(xiàn)了新行是以=開頭的,替換為空格
ta      如果找到了替換,從標簽a處再執(zhí)行,否則向下走
P     打印 pattern space中的第一個 \n之前的內(nèi)容
D     刪除pattern space中的第一個 \n之前的內(nèi)容,并返回腳本頭部執(zhí)行
各個命令解釋清楚了,再看執(zhí)行過程:
第一行執(zhí)行,沒有找到 \n= 打印第一行,讀入第二行,腳本頭部執(zhí)行
第二行執(zhí)行,找到 \n= ,替換為空格,從標簽a處再執(zhí)行
第三行執(zhí)行,沒有找到 \n= 打印第二三行的合并和第四行,讀入新行,沒有了,結(jié)束。



我非常敬仰admirer,如有不對,請指正。

論壇徽章:
0
6 [報告]
發(fā)表于 2004-03-19 09:52 |只看該作者

請問sed的P命令和D命令的用法

-e :a 定義一個標簽位置

理解

$!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í)行?
請大蝦賜教!

論壇徽章:
0
7 [報告]
發(fā)表于 2004-03-19 10:24 |只看該作者

請問sed的P命令和D命令的用法

我的第三行執(zhí)行寫的不清楚,圖了省事,你的理解很不錯,但也有點問題。
    就是這個 -e:a有點問題,我不知道自己理解的是否對,我認為這個標簽只定義一次。不是每一行都定義的。還有這個ta 他就相當于if found 替換 goto a;
      s命令的執(zhí)行無條件,有就替換,沒有就不替換;'P;D'是不管什么條件都執(zhí)行。
    歡迎交流。

論壇徽章:
0
8 [報告]
發(fā)表于 2004-03-19 10:46 |只看該作者

請問sed的P命令和D命令的用法

我是覺得sed的每一個命令地位都是相等的,所以我認為-e :a是每讀入一行的時候都執(zhí)行一次。
還有如果s命令沒有條件的話,那么t命令為什么就是“if found 替換”才能跳到a呢?s命令為什么不是“if found 替換”再執(zhí)行替換呢?我覺得s命令和t命令的執(zhí)行順序是按順序執(zhí)行的,所以如果s命令有執(zhí)行,t命令也要執(zhí)行。如果s命令沒有執(zhí)行(當然不考慮s匹配不到自己的正則表達式的情況),那么t命令也不會執(zhí)行。對嗎?
我現(xiàn)在P命令和D命令已經(jīng)搞明白了,但是命令組合中的命令執(zhí)行順序和執(zhí)行條件越搞越不明白。比如下列幾種情況:
sed -e 'comd1' -e 'comd2'
sed -e 'comd1;comd2'
sed -e '$!comd1;comd2'
sed -e '/reg/{comd1;comd2;}'
不知道還有沒有其他組合,這幾個有什么不同嗎?

論壇徽章:
7
榮譽版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07獅子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10雙子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
9 [報告]
發(fā)表于 2004-03-19 11:46 |只看該作者

請問sed的P命令和D命令的用法

COMM:代表命令,PATT:代表pattern space的內(nèi)容,其他為sed輸出的內(nèi)容
  1. PATT:111111111111111111$
  2. COMM:: a
  3. COMM:$ !N
  4. PATT:111111111111111111\n222222222222222222$
  5. COMM:s/\n=/ /
  6. PATT:111111111111111111\n222222222222222222$
  7. COMM:t a
  8. COMM:P
  9. 111111111111111111
  10. PATT:111111111111111111\n222222222222222222$
  11. COMM:D
  12. PATT:222222222222222222$
  13. COMM:: a
  14. COMM:$ !N
  15. PATT:222222222222222222\n=333333333333333333$
  16. COMM:s/\n=/ /
  17. PATT:222222222222222222 333333333333333333$
  18. COMM:t a
  19. COMM:$ !N
  20. PATT:222222222222222222 333333333333333333\n444444444444444444 $
  21. COMM:s/\n=/ /
  22. PATT:222222222222222222 333333333333333333\n444444444444444444 $
  23. COMM:t a
  24. COMM:P
  25. 222222222222222222 333333333333333333
  26. PATT:222222222222222222 333333333333333333\n444444444444444444 $
  27. COMM:D
  28. PATT:444444444444444444 $
  29. COMM:: a
  30. COMM:$ !N
  31. PATT:444444444444444444 $
  32. COMM:s/\n=/ /
  33. PATT:444444444444444444 $
  34. COMM:t a
  35. COMM:P
  36. 444444444444444444
  37. PATT:444444444444444444 $
  38. COMM:D
復(fù)制代碼

論壇徽章:
0
10 [報告]
發(fā)表于 2004-03-19 15:23 |只看該作者

請問sed的P命令和D命令的用法

看了版主的解釋,應(yīng)該“:a”命令和“ta”命令都是每次讀入一行后都要執(zhí)行的,我的理解對嗎?那么仍然有一個疑問:執(zhí)行了命令t a以后,為什么有時候是執(zhí)行P命令,有時候是執(zhí)行$!N命令?這個跳轉(zhuǎn)命令的條件是什么呢?
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP