我想#在檔案中每一行的開頭插入一個。但僅限于部分之間的那些行:
################## PATTERN #1 ##############
blah 1243234
blah asdfsyxfvb
blah asdfasdfg
################## PATTERN #2 ##############
-->
################## PATTERN #1 ##############
#blah 1243234
#blah asdfsyxfvb
#blah asdfasdfg
################## PATTERN #2 ##############
我幾乎以我對awk和 的有限知識得到了它sed。但我正在努力將輸出合并到我的檔案中。
awk '/################## PATTERN #1/{flag=1;next}/################## PATTERN #2/{flag=0}flag' myinputfile | sed 's/^/#/'
預先感謝您幫助我。
PS 因為我是新來的:如果有人有更好的標題/標簽的想法,請告訴我,我會更改它。
uj5u.com熱心網友回復:
這可能是你想要的:
$ awk '/PATTERN #2/{f=0} f{$0="#" $0} /PATTERN #1/{f=1} 1' file
################## PATTERN #1 ##############
#blah 1243234
#blah asdfsyxfvb
#blah asdfasdfg
################## PATTERN #2 ##############
顯然,將“模式”分隔符調整為您想要的任何內容。
uj5u.com熱心網友回復:
假設第二種模式始終存在,sed單行模式可能會完成這項作業:
sed '/PATTERN #1/,/PATTERN #2/s/^/#/' file
uj5u.com熱心網友回復:
您的代碼可能會重新撰寫以執行您想要的操作。讓file.txt內容成為
################## PATTERN #1 ##############
blah 1243234
blah asdfsyxfvb
blah asdfasdfg
################## PATTERN #2 ##############
然后
awk '/################## PATTERN #1/{flag=1;print;next}/################## PATTERN #2/{flag=0;print;next}{print (flag?"#":"") $0}' file.txt
輸出
################## PATTERN #1 ##############
#blah 1243234
#blah asdfsyxfvb
#blah asdfasdfg
################## PATTERN #2 ##############
說明:對于PATTERN #1設定標志為 0 的行,列印行,轉到下一行,對于PATTERN #2設定標志為 1 的行,列印行,轉到下一行,如果標志為真(1),則每隔一行加上#和列印,如果標志為假(0),則在行前加上空字串(即不更改)并列印。我使用三元運算子(條件?valueiftrue :valueiffalse)來選擇適合標記值的字串
(在 gawk 4.2.1 中測驗)
uj5u.com熱心網友回復:
這可能對你有用(GNU sed):
sed '/PATTERN #1/{:a;N;/PATTERN #2/!ba;s/^[^#]\?/#&/mg}' file
收拾行之間PATTERN #1以及PATTERN #2和插入#在沒有他們行的前面。
注意這只會在兩種模式都存在的情況下更新檔案。
要修改PATTERN #1和之間的最少行,PATTERN #2即在第一次出現的行不會被注釋PATTERN #1之前再次PATTERN #2出現PATTERN #1,請使用:
sed '/PATTERN #1/{:a;N;/\n.*PATTERN #1/{h;s/\(.*\)\n.*/\1/p;g;s/.*\n//;ba}
/PATTERN #2/!ba;s/^[^#]\?/#&/mg}' file
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/372408.html
上一篇:sed從檔案中提取部分字串
