2013-07-01 32 views
1

我有通過{}用幾行分隔模式的文件,我想找到對他們的具體sintax,在我的源文件的兩行之間的界線有時線條出現這樣的:加入模式

{ some text size = 
      0 }

{ some text size 
     = 0 }

等案件

{some text size = 0 }

我會就像過濾我的源文件並加入符合分隔條件的行並將其轉換爲一行!

+4

告訴我們您對如何處理這個問題的看法。 – devnull

+1

是'tr -d'\ n' anishsane

+0

@anishsane很可能不會,因爲源文件可能包含的不僅僅是這些行。 –

回答

0

快速和骯髒的:(GAWK需要):

awk -v RS="\0" '{gsub(/ size\s*=\s*0\s*}/," size = 0}")}1' file 

測試與你的問題的文字作爲內容的文件:

kent$ cat test.txt 
I have files with paterns delimited by {}, on my source files sometimes I have two lines like this: 
{ some text size = 
      0 } 
or 
{ some text size 
     = 0 } 
and other cases 
{some text size = 0 } 
{this should stay as it is 

} 

kent$ awk -v RS="\0" '{gsub(/ size\s*=\s*0\s*}/," size = 0}")}1' test.txt 
I have files with paterns delimited by {}, on my source files sometimes I have two lines like this: 
{ some text size = 0} 
or 
{ some text size = 0} 
and other cases 
{some text size = 0} 
{this should stay as it is 

} 
+0

它工作正常,感謝您的幫助!只有一個問題,我在一些文件上發現我的代碼在三行上分裂,我可以驗證並加入這些行。分隔符總是{和}。 –

+0

@SergioPeres你用我的awk行與你的文件嘗試嗎?無論你的模式被分割成多少行,它都應該工作。 – Kent

0

Perl的解決方案:

  • 簡單的命令-line:

    perl -pe 'local $/; s/({.*size *(?:= *)?)\n/$1/g;' infile >outfile 
    
  • 腳本:

    #!/usr/bin/env perl 
    
    use strict; 
    use warnings; 
    
    $filename = "/path/to/file" 
    
    open FILE, "<$filename" or die $!; 
    local $/; 
    my $txt = <FILE>; 
    close FILE; 
    
    $txt =~ s/({.*size) *(?:= *\n|\n *=) *(0 *})/$1 = $2/g; 
    
    open FILE, ">$filename" or die $!; 
    print FILE $txt; 
    close FILE; 
    
+0

它不起作用!我的文件是由數據庫導出產生的。我有一個大文件,上面有幾行代碼,我想從一些表中清除一些值。我已經看到並製作了一個小腳本,可以獲得兩行代碼,我不想改變。我發現的問題是在一些系統上文件是用分割線創建的。 –

+1

聽起來像是[X-Y問題](http://mywiki.wooledge.org/XyProblem)。請描述你實際想要達到的目標,比你之前提供的環境要多一點。 –