2016-09-26 99 views
1

我需要刪除字符「[]」中使用的字符串以外的所有行。
輸入文件:ODBC.INI如何在linux shell腳本中獲得期望的字符串

[ODBC Data Sources] 

odbcname  = MyODBC 3.51 Driver DSN 
[odbcname] 

Driver  = /usr/lib/odbc/libmyodbc.so 
Description = MyODBC 3.51 Driver DSN 
[Default] 

預期輸出:ODBC.INI

[ODBC Data Sources] 

[odbcname] 

[Default] 

還需要不同的DSN名稱刪除此舊後。 由於提前

+1

'grep的input.txt' –

+0

'還需要不同的DSN名稱刪除這個老one'後 - 不知道這是什麼意思 「\ [* \。]」。 .. –

+0

讓 - 弗朗索瓦法布爾我需要這個問題的答案http://stackoverflow.com/q/39726811/4087559 –

回答

1

sed用到位(-i)編輯:

sed -Ei '/\[[^]]*\]|^[[:blank:]]*$/ !d' ODBC.ini 
  • \[[^]]*\]具有[]

  • ^[[:blank:]]*$匹配空行或只包含空格

  • 線線相匹配
  • !d刪除不匹配的行

同樣,只打印出匹配的行awk

awk '/\[[^]]*\]|^[[:blank:]]*$/' ODBC.ini 

最近GNU awk在就地編輯選項:

awk -i inplace '/\[[^]]*\]|^[[:blank:]]*$/' ODBC.ini 

POSIX-LY:

awk '/\[[^]]*\]|^[[:blank:]]*$/' ODBC.ini >ODBC_temp.ini && mv ODBC{_temp,}.ini 

例子:

$ sed -E '/\[[^]]*\]|^[[:blank:]]*$/ !d' file.txt 
[ODBC Data Sources] 

[odbcname] 

[Default] 


$ awk '/\[[^]]*\]|^[[:blank:]]*$/' file.txt 
[ODBC Data Sources] 

[odbcname] 

[Default] 
+0

非常感謝你的時間heemayl –

+0

請你解釋模式「\ [[^]] * \] 「 怎麼運行的。 –

+0

@subakhank當然。在'\ [[^]] * \]'中,'\ ['匹配文字'[','[^]] *'匹配零個或多個字符到下一個']','\]'匹配''' 。 – heemayl

0

如果這不是你所需要的:

$ grep '\[' file 
[ODBC Data Sources] 
[odbcname] 
[Default] 

然後編輯你的問題,以提供更多的真正具有代表性的樣品輸入/輸出。

+0

對不起,Ed是我的錯。 「我想清除舊的DSN配置文件,並希望添加新的DSN配置文件」。從ur ans它將清除之後,我需要添加新的配置文件以相同的模式,而不會干擾[]的內容。 –

+0

尋找答案stackoverflow.com/q/39726811/4087559 –

+0

你發佈了一個可點擊的鏈接,我可能已經看過它。 –

0

使用grep:

打印開始後[一切直到第一]線到達。

grep -oP '^\[.*?]' infile 
    [ODBC Data Sources] 
    [odbcname] 
    [Default] 

使用awk

awk -F'[|]' '/^\[/{print $1}' infile 
[ODBC Data Sources] 
[odbcname] 
[Default] 
0

您可以使用awk。以下awk程序匹配包含[value in brackets]或空行的行。

awk '/^\[.*]$/ || /^$/' file 

輸出:

[ODBC Data Sources] 

[odbcname] 

[Default] 
相關問題