我想搜索一个字符串,并在递归的目录中的所有文件中用不同的字符串替换它.我能够像这样在一个文件上使用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" @
与表达式中的变量名一起使用时出现错误消息:
:没有这样的文件或directoryult.js
:没有这样的文件或directoryders.aspx
:没有这样的文件或directoryork.css
:没有这样的文件或directoryal-power.js
如何使用变量名称而不是硬编码?
环境:cygwin(所以Windows GNU sed / grep)
最佳答案 感谢@NeronLeVelu,这是解决方案:
字符串searchstr = ‘/图像/’
项replacestr =的 ‘https://example.com/Images/’
grep -rnlis –include = *.{html,css,js,aspx}“$rootDir”-e“/ images /”|同时读取文件; do sed -i“s | ${searchStr} | ${replaceStr} | I”“${File}”; DONE
它完美地工作并递归地替换rootDir中的searchStr.