2016-09-20 42 views
0

我想更換任何看起來像文本替換,同時擴大變量,用它們作爲字符串文字,並添加一個新行

if (Thing *thing1 = Stuff) { 

Thing *thing1 = Stuff; 
if (thing1) { 

基本上採取申報出來的,如果聲明。

我有所有的部分,我看到他們是正確的,我只是有與更換的麻煩

grep ' if (.* = .*) {' $file | while read -r line ; do 

    inside="$(echo "$line" | cut -d "(" -f2 | cut -d ")" -f1);" 
    object="$(echo $(echo "$inside" | cut -d "*" -f2 | cut -d "=" -f1) | xargs)" 
    newIF=" if ($object) {" 
    replacement="$inside\n$newIF" 

    line_regexp="$(echo "$line" | sed -e 's/[]\/$*.^|[]/\\&/g')" 
    replacement_regexp="$(echo "$replacement" | sed -e 's/[\/&]/\\&/g')" 

    sed -i.bak "s/$line_regexp/$replacement_regexp/g" $file 


done 

編輯感謝:https://superuser.com/questions/422459/substitution-in-text-file-without-regular-expressions

現在我只需要弄清楚如何把 「\ n」 爲實際的換行符

+0

將b蟒蛇非常簡單?你從一開始就使用'sed'的原因是什麼? – beroe

+0

@beroe我已經使用bash。呃很多,因爲我不知道如何做文本替換?我打開其他選項 – user101

+0

嘗試'echo'if(Thing * thing1 = Stuff){'| perl -pe's/if \ s *(\(。* \ *(\ S +)。* \))\ s * {/ $ 1; \ nif($ 2){/'' – Sundeep

回答

1

這sed的應該爲你工作:

$ sed -n 's/if (\([^ ]* \*\([^ ]*\) = [^)]*\)) {/\1;\nif (\2) {/p' <<< "if (Thing *thing1 = Stuff) {" 
Thing *thing1 = Stuff; 
if (thing1) { 
相關問題