2017-06-21 59 views
1

我是新來猛砸,我試圖創建一個bash的功能,可以:bash腳本通過更換帶有包含空格的任意輸出字符串任意輸入字符串的sed

1)找到匹配它被賦予的所有文件名($1 )遞歸地在我的當前目錄下的子文件夾

2)找到並更換整條生產線的變量字符串($2)與第二可變字符串匹配模式($3

我想我最的在那裏,但有麻煩重新放置包含空格的文本字符串我現在的功能是這樣的:

rplcPhrase() { 
    find . -name $1 -exec sed -i "/$2/c $3" {} + 
} 

rplcPhrase $1 $2 $3 

和命令行輸入看起來像

研究類似的問題已經解釋的必要性,以便用「逃離」特殊字符(如「!」)在該模式中,並且必須在搜索模式中使用[[:space:]]來計算空格。但是,我想返回一個包含空格的短語。上面的命令行輸入的結果正確地找到圖案

!phrase to change 

replacement[[:space:]]phrase 

替換它如果我代替改變replacement[[:space:]]phrasereplacement phrase,它僅產生

replacement 

就像我說,我覺得我快到了,只是想念一些簡單的東西。任何幫助,將不勝感激。

我已經搜索了這個,並找不到解決方案,相當解決我的問題。見鏈接: Replace whole line containing a string using Sed

Using sed to replace text with spaces with a defined variable with slashs

+2

引用您的變量。 – Barmar

+0

@Barmar我應該在哪裏引用變量?在sed命令('sed -i「/」$ 2「/ c」$ 3「」')? – zsatter14

回答

1

您需要引用變量,以防止分詞和通配符擴展。

rplcPhrase() { 
    find . -name "$1" -exec sed -i "/$2/c $3" {} + 
} 

rplcPhrase "$1" "$2" "$3" 
+0

修復了它。謝謝! – zsatter14

相關問題