2016-08-16 95 views
0

我想評論一組使用Shellscript的行。如何使用shell腳本查找下一個[]並註釋它們之間的所有行?

$>cat abc.txt 
[entry1] 
abcd 
efgh 
ijkl 
mnop 

[entry2] 
abcd 
efgh 
ijkl 
mnop 
qust 

[entry3] 
abcd 
efgh 
ijkl 
mnop 
qrst 
uvwx 
yz 

[entry4] 
... 
... 
... 
... 

從上面的文件,我想找到[ENTRY2]和評論之間的所有[ENTRY2]的行[entry3] 注:條目之間的行數不一樣。

我想輸出類似下面..

$>cat abc.txt 
[entry1] 
abcd 
efgh 
ijkl 
mnop 

#[entry2] 
#abcd 
#efgh 
#ijkl 
#mnop 
#qust 

[entry3] 
abcd 
efgh 
ijkl 
mnop 
qrst 
uvwx 
yz 

[entry4] 
... 
... 
... 
... 

我想我們能與SED做到這一點。但不確定確切的用法。

任何人都可以建議嗎?

+1

請看看[編輯的幫助(http://stackoverflow.com/editing-help)。 – Cyrus

+1

發佈預期的輸出tooo – sjsam

回答

2

正如你猜,sed是你的朋友。你可以匹配模式之間的文本來實現你想要的。

sed -E '/^\[entry2\]/,/^$/s/^(.)/#\1/' file 

[entry1] 
abcd 
efgh 
ijkl 
mnop 

#[entry2] 
#abcd 
#efgh 
#ijkl 
#mnop 
#qust 

[entry3] 
abcd 
efgh 
ijkl 
mnop 
qrst 
uvwx 
yz 

[entry4] 
... 
... 
... 
... 

它是如何工作

  • /pattern1/,/pattern2/匹配文本的模式,包括模式
  • 下面的命令之間,s這裏被應用在所有這些行。
  • 現在,由於您不需要評論空白行,我們需要檢查該行是否至少有一個非空白字符(請注意完成此操作的.)。
  • ^
  • ()用於分組字符和\1在更換部件用於替代組
  • 現在讀出的線一起

的行的開頭相匹配備註

[]有特殊的意思在sed中,它們表示字符範圍。要搜索文字[],您需要轉義它們 - 即\[ - 正如我們在此處所做的那樣。


+0

嗨sjsam,再次包含正確的文件格式。編輯。你現在可以提出建議嗎? –

+0

@SanthoshkumarRamachandran:請參閱更新..這假定每個[條目]字段前都有空行。 – sjsam

+0

優秀的sjsam ..我得到了預期的輸出。你能解釋一下命令嗎? –

0
awk ' /^\[entry2\]/ {flag=1} /^\[entry3\]/{flag=0} flag { $0="#"$0}1' entry 
[entry1]<br> 
abcd<br> 
efgh<br> 
ijkl<br> 
mnop<br><br> 

#[entry2]<br> 
#abcd<br> 
#efgh<br> 
#ijkl<br> 
#mnop<br> 
#qust<br><br> 
# 
[entry3]<br> 
abcd<br> 
efgh<br> 
ijkl<br> 
mnop<br> 
qrst<br> 
uvwx<br> 
yz<br> 

[entry4] 
... 
... 
... 
... 
+0

嗨蘇凡,增加預期的輸出和文件格式。請立即檢查並建議 –

+0

@SanthoshkumarRamachandran,現在檢查它是否有助於 –

+1

@soFan:請注意,空行不會評論,你需要tweek的O/P位來實現它..;) – sjsam

相關問題