我有一個文件pattern.txt,它由一行非常長的複雜代碼(〜8200個字符)組成。Bash sed替換爲文件中文本的完全匹配
此代碼可以在多個目錄內的多個文件中找到。
我可以很容易地識別使用
grep -rli 'uniquepartofthecode' *
我擔心的是我怎麼用確切的文本從文件中替換這些文件的列表?
我試圖做的:
var=$(cat pattern.txt)
sed -i "s/$var//g" targetfile.txt
,但我得到了以下錯誤:
的sed:-e表達式#1,焦炭96:未知的選項爲'S'
sed正在將我的$ var內容解釋爲正則表達式,我希望它只匹配確切的文本。
pattern.txt的內容可能是或多或少的字符組合,所以恐怕我無法有效地逃避每個字符。
有沒有使用sed的解決方案?或者我應該使用其他工具嗎?
編輯:
我嘗試使用此解決方案,以從我的文本文件正確的正則表達式。 Is it possible to escape regex metacharacters reliably with sed
總體過程是:
var=$(cat pattern.txt)
searchEscaped=$(sed 's/[^^]/[&]/g; s/\^/\\^/g' <<<"$var")
sed -n "s/$searchEscaped/foo/p" <<<"$var" # if ok, echoes 'foo'
這最後一個命令顯示 「foo」 的。 $ searchEscaped似乎已被正確轉義。 雖然,這是不返回任何東西(它應該不匹配的部分顯示FOO +文件的其餘部分):
sed -n "s/$searchEscaped/foo/p" targetfile.txt
選中此項:http:// stackoverflow。com/questions/29613304/is-it-it-escape-regex-meta-characters-reliable-with-sed – hek2mgl
很好用,直到 'sed -n「s/$ searchEscaped/foo/p」<<<「$ search 「#if if,echo'foo'' 然後我嘗試 'sed -i」s/$ searchEscaped // g「targetfile.txt' 但是沒有成功 – TheTrueTDF
您正在使用'-n'來取消sed的輸出。你能顯示你的輸入文件嗎? – hek2mgl