2013-10-08 136 views
0

我想我有一個sed或awk問題。我試圖從bash腳本中操作一個配置文件,但是我找不到正確的方法來完成它。AWK或Sed,還是一起?

我在配置文件中的以下內容:

bla.update(
{'test': {'tag': 'twenty', 

並希望將其更換到:

bla.update({ 
'test': {'tag': 'twenty', 

我嘗試過各種sed的& awk的教程,但我找不到它。

我猜不應該太難,但我卡住了,請幫助我!

+0

只是移動的一般模式打開括號到前一行? – SheetJS

+0

是的,那是唯一的確.. – Ron

回答

2

sed ':a;N;$!ba;s/(\n{/({\n/g'

對我的作品

+0

也適用!謝謝!! – Ron

1

一些這樣的:

awk 'f {sub(/{/,x);f=0} /bla.update/ {$0=$0 "{";f=1}1' 
bla.update({ 
'test': {'tag': 'twenty', 

它搜索bla.update然後添加{末,並設置標誌f=1 如果標誌f設置,那麼從線和清晰的標誌開始刪除{

+1

酷!那樣做了。謝謝! – Ron

1

下面是使用的嘗試sed

sed 'N;s/(\s*\n\s*{/({\n/g' file 

樣品輸入:

bla.update(
{'test': {'tag': 'twenty', 

輸出:

bla.update({ 
'test': {'tag': 'twenty', 
2

隨着GNU AWK這樣你就可以一次讀取使用-v RS='\0'整個文件(也將與其他一些awks工作):

$ awk -v RS='\0' -v ORS= '{gsub(/\n{/,"{\n")}1' file 
bla.update({ 
'test': {'tag': 'twenty', 

與其他awks你可以使用一些其他的字符是不存在的輸入文件,例如一個控制-C或類似的,而不是\0如記錄分隔符上方或可以這樣做:

$ awk -v RS= -v ORS='\n\n' '{gsub(/\n{/,"{\n")}1' file 
bla.update({ 
'test': {'tag': 'twenty', 

但它將壓縮的連續的空行序列到一個空行,並在末尾添加尾空白行如果其中一個還沒有出現的話。

最後,您可以構建從整個文件內容的字符串讀取使用任何AWK一次在一個行,然後在最後一節對字符串進行操作:

$ awk '{s=s $0 ORS} END{gsub(/\n{/,"{\n",s); printf "%s",s}' file 
bla.update({ 
'test': {'tag': 'twenty',