我想搜索一个字符串,并在递归的目录中的所有文件中用不同的字符串替换它。我可以像这样在一个文件上使用sed,它可以工作:
sed -i "s|${searchStr}|${replaceStr}|g" "${rootDir}"file.cs
但是当我使用grep时,我没有看到文件中的更改或收到任何错误消息。
此作品
grep -rnlis --include=*.{html,css,js,aspx} './' -e "/images/" |
xargs -i@ sed -i "s|/images/|https://example.com/Images/|I" @
尝试了这些,但没有奏效:
searchStr='/images/'
replaceStr='https://example.com/Images/'
... -e "$searchStr" | xargs -i@ sed -i "s|$searchStr|$replaceStr|I" @
和
... -e "${searchStr}" | xargs -i@ sed -i "s|${searchStr}|${replaceStr}|I" @
与表达式中的变量名一起使用时,错误消息:
: No such file or directoryult.js
: No such file or directoryders.aspx
: No such file or directoryork.css
: No such file or directoryal-power.js
如何使用变量名而不是硬编码?
环境:cygwin(所以Windows GNU sed / grep)
答案 0 :(得分:1)
感谢@NeronLeVelu,这是解决方案:
searchStr='/images/'
replaceStr='https://example.com/Images/'
grep -rnlis --include=*.{html,css,js,aspx} "$rootDir" -e "/images/" | while read File; do sed -i "s|${searchStr}|${replaceStr}|I" "${File}"; done
它完美无缺,并以递归方式替换rootDir中的searchStr。