2017-06-13 280 views
4

我試圖用多行代替一個字符串。現在已經很晚了,我正在變得焦躁不安,也許有人會更願意爲某些SO點而投籃。我替換字符串 '存儲爲TEXTFILE' 從下面的SQL ...sed替換一組文件字符串

PARTITIONED BY(load string, date string, source_file string) 
STORED AS TEXTFILE 
LOCATION '${staging_directory}/${tablename}'; 

,並使其看起來像......

PARTITIONED BY(load string, date string, source_file string) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
STORED AS TEXTFILE 
LOCATION '${staging_directory}/${tablename}'; 

所以我的表達是

:%s/)\nSTORED AS TEXTFILE\nLOCATION '/)\rROW FORMAT DELIMITED \rFIELDS TERMINATED BY ',' \rSTORED AS TEXTFILE \rLOCATION '/g 

它在文件內工作(使用vim),但我無法讓它在目錄中的所有文件上使用一個命令。我已經嘗試到目前爲止......

sed -i "s/)\nSTORED AS TEXTFILE\nLOCATION '/)\rROW FORMAT DELIMITED \rFIELDS TERMINATED BY ',' \rSTORED AS TEXTFILE \rLOCATION '/g" 

...我也嘗試了上述語句,所有的空格都逃脫了。請幫忙!由線下面的鏈接

回答

2

呆子就地編輯方法 - 可從GNU AWK 4.1.0:

gawk -i inplace '$0~/STORED AS TEXTFILE/{ $0="ROW FORMAT DELIMITED" ORS "FIELDS TERMINATED BY \047,\047" ORS $0 }1' file* 
  • -i inplace - 就地編輯每個輸入文件的
+0

這不適合我,我收到了一條使用信息。 –

+0

什麼*使用信息*? – RomanPerekhrest

+0

用法:gawk [POSIX或GNU風格選項] -f progfile [ - ]文件... 用法:gawk [POSIX或GNU風格選項] [ - ]'程序'文件... POSIX選項:GNU long選項: -f progfile --file = progfile -F fs --field-separator = fs -v var = val --assign = var = val –