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

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問(wèn)板塊 發(fā)新帖
查看: 4154 | 回復(fù): 17
打印 上一主題 下一主題

[文本處理] 如何給printf之前和之后加上合適的一行 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2014-08-09 10:04 |只看該作者 |倒序?yàn)g覽
本帖最后由 l2002924700 于 2014-08-09 19:57 編輯

現(xiàn)在有這樣一篇文件,就是該文件內(nèi)有若干個(gè)printf,其中每個(gè)printf前面有若干個(gè)制表符,我們需要在printf之前一行加上#ifdef XXX,在printf之后一行,加上#endif,同時(shí)這若干個(gè)printf中有幾行是連續(xù)的有printf,即:
printf();
printf();
........
printf();
這種情況是只在第一個(gè)printf之前加上#ifdef XXX,在最后一行之后加上#endif
那么我現(xiàn)在有一個(gè)問(wèn)題,就是如何針對(duì)printf做處理呢?printf之前有若干個(gè)制表符,之后又有(,請(qǐng)教方家,這個(gè)腳本該怎么寫(xiě)呢?
再追加一個(gè)問(wèn)題,就是如何在一個(gè)腳本中,即使用sed命令,又使用awk命令呢?這兩個(gè)命令的解釋器不一樣

論壇徽章:
32
處女座
日期:2013-11-20 23:41:20雙子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00處女座
日期:2014-07-22 17:30:47獅子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥豬
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58處女座
日期:2014-12-02 09:17:52程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-06-16 22:20:002015亞冠之塔什干火車(chē)頭
日期:2015-06-20 23:28:22
2 [報(bào)告]
發(fā)表于 2014-08-09 10:22 |只看該作者
把你的正常情況、特殊情況,一個(gè)不漏的列舉出來(lái),最后將你想要的結(jié)果貼出來(lái),比你說(shuō)一大堆更有用!

論壇徽章:
8
戌狗
日期:2013-10-12 11:37:19雙子座
日期:2014-05-06 14:40:39巨蟹座
日期:2014-06-14 09:22:18戌狗
日期:2014-09-18 16:05:44巨蟹座
日期:2014-12-27 16:37:26酉雞
日期:2015-01-20 18:39:022015年亞洲杯之沙特阿拉伯
日期:2015-04-20 22:38:242015亞冠之薩濟(jì)拖拉機(jī)
日期:2015-06-19 16:01:03
3 [報(bào)告]
發(fā)表于 2014-08-09 10:58 |只看該作者
源文件---目標(biāo)文件

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2014-08-09 18:25 |只看該作者
我有個(gè)笨的辦法,先把所有的printf前后都加上ifdef和endif,然后再出去所有重復(fù)的,重復(fù)的一定是連續(xù)的如下
#endif
#ifdef XXX

sed '/printf\(\)/ i\#ifdef XXX' r3.txt |sed '/printf\(\)/ a\#endif' |sed '/#endif/N;/#endif\n#ifdef XXX/d'




[root@symc1 scripts]# cat r3.txt
1

printf();


printf();
printf();
........
printf();



printf();
printf();
printf();


printf();


[root@symc1 scripts]# sed '/printf\(\)/ i\#ifdef XXX' r3.txt |sed '/printf\(\)/ a\#endif' |sed '/#endif/N;/#endif\n#ifdef XXX/d'
1

#ifdef XXX
printf();
#endif


#ifdef XXX
printf();
printf();
#endif
........
#ifdef XXX
printf();
#endif



#ifdef XXX
printf();
printf();
printf();
#endif


#ifdef XXX
printf();
#endif

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2014-08-09 19:56 |只看該作者
sed '/#endif/N后面的/N該怎么理解啊?

論壇徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年紀(jì)念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役紀(jì)念章
日期:2022-04-24 14:33:24
6 [報(bào)告]
發(fā)表于 2014-08-09 20:18 |只看該作者
回復(fù) 5# l2002924700


    append the next line of input into the pattern space.

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2014-08-09 20:20 |只看該作者
本帖最后由 l2002924700 于 2014-08-09 20:43 編輯

回復(fù) 2# yestreenstars
這位仁兄指教的是:
正常情況就是:
有一行printf(“”);
要在它的前面和后面分別加上#ifdef XXXX和#endif。
特殊情況就是有多行的printf(“”);,只是在第一個(gè)printf的上一行加上#ifdef xxx和最后一行之后的一行加上#endif。
我寫(xiě)的腳本是這樣的:
#/bin/awk -f
BEGIN {FS = "(";}//以(作為列分隔符, 這樣可以將printf以及之前的若干個(gè)空白符作為第一個(gè)域


sub/^\/\/[ |\t]*printf/printf/;  //刪除printf之前多于的空白字符

if(($1 == "printf") && (x != "printf")) {//如果當(dāng)前行是printf并且上一行不是printf,那么就在當(dāng)前行的上一行加上#ifdef XXXX
        print "#ifdef  xxxx";
        print $0;
} else if(($1 != "printf")&&(x == printf)) {//如果當(dāng)前行不是printf并且上一行是printf,那么就在當(dāng)前行的下一行加上#endif
        printf $0;
        print “#endif”;
} else {
        print $0;
}

x = $1;
之所以要把printf之前的空白字符去掉,就是因?yàn)槲艺也坏侥軌蚝颓懊嬗腥舾蓚(gè)空白字符的一行精確相等的辦法。
小弟是初學(xué),還望各位方家指正。

論壇徽章:
3
天蝎座
日期:2013-12-10 19:37:11酉雞
日期:2014-08-04 20:05:38雙魚(yú)座
日期:2014-08-09 21:53:54
8 [報(bào)告]
發(fā)表于 2014-08-09 20:41 |只看該作者
本帖最后由 歐陽(yáng)西風(fēng) 于 2014-08-09 20:41 編輯

回復(fù) 7# l2002924700


    你判斷這一行是否包含printf,沒(méi)必要使$1完全等于printf吧,只要判斷
  1. $0 ~ /printf/
復(fù)制代碼
不就行了嘛?

另外 你的x沒(méi)有賦值,你這個(gè)腳本能夠成功運(yùn)行?

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2014-08-09 20:44 |只看該作者
謝謝,改了。能不能解釋一下你這條指令的含義啊,特別是波浪符~在這的作用。

論壇徽章:
3
天蝎座
日期:2013-12-10 19:37:11酉雞
日期:2014-08-04 20:05:38雙魚(yú)座
日期:2014-08-09 21:53:54
10 [報(bào)告]
發(fā)表于 2014-08-09 20:48 |只看該作者
回復(fù) 9# l2002924700


    這個(gè)就是正則 “匹配” 了,也即$0 匹配 printf(這里的正則表達(dá)式恰好也是一個(gè)字符串)。

根據(jù)你的思路,沒(méi)必要設(shè)置分隔符來(lái)取$1,只需要使用$0,并用x來(lái)保存$0,仍然是判斷匹配即可。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP