2015-12-02 54 views
0

我有一個包含超過14000條記錄的文件。 我想要做的就是逐行處理這個文件,並用grep命令返回的anodher字符串替換字符串。 例如: 行:對於文件的每一行,grep一個特定的字符串並進行字符串替換

/xxxxx/xxxxx/Class.java:67: Logger.w(TAG, "message"); 

我的grep命令得到Class.java字符串(Class.java是中庸之道爲例):

grep -o '[a-zA-Z]*"*\.java"*' 

我必須爲每一行,替換TAG字符串由class.java string grep命令返回

+0

你需要用'sed',而不是'grep'。 – Maroun

+0

你可以發佈兩個不同文件的示例輸出嗎?目前還不清楚是否需要文字'class.java'或者這是否是從處理過的文件名派生出的字符串(並且是否意味着小寫?) –

+0

Class.java只是一個示例。 我有例如MainActivity.java LoginActivity.java等 –

回答

1

您可以使用sed並執行以下操作:

sed -r 's#(.*)/(.*)\.java(.*)(TAG)#\1\/\2\3\2#g' 

字符與括號包圍的,你可以在第二部分用得到它們的內容。

爲了修改就地文件,你應該:

sed -ir 's#(.*)/(.*)\.java(.*)(TAG)#\1\/\2\3\2#g' your_file.txt 
+0

第一個命令可以正常工作,並且在我的終端中,我看到所有TAG字符串都由正確的className替換,但在輸出文件中TAG字符串保持不變。 第二個命令(我需要)返回一個錯誤: sed:-e expression n°1,caractère39:référence\ 3 invalide dans lecôtédroit de la commande's' \ 3 reference is not valide in the right 's'命令的一面,我想不通 –

+0

我想感謝你的回覆。最後,我使用第一個命令並將結果在stdout中存儲到一個文件:) –

+0

@ diego-bf我很高興它幫助你。我無法理解你得到的錯誤,這不是英語。 – Maroun

1

這是w這裏的sed進來:

sed -i 's/TAG/class.java/g' Class.java 

做它在當前目錄下的所有java文件(這裏假設的bash):

sed -i 's/TAG/class.java/g' *.java 

-i意味着原地的,所以更換髮生在文件中,並保存立即。其餘的我建議你谷歌關於sed。

+0

這幾乎是正確的,你只需要支持'。* \。java'而不是'class.java'。 – Maroun

+0

@MarounMaroun thx。完成。我不確定這是OP需要的。 –

+0

他需要用'.java'之前出現的內容替換TAG,你的回答仍然不正確。 – Maroun

0

您可以使用:

grep -rl 'old_string' ./ | xargs sed -i 's/old_string/Relacement_String/g' 
相關問題