正则表达式 – 当组合grep和sed时如何使用变量名?

我想搜索一个字符串,并在递归的目录中的所有文件中用不同的字符串替换它.我能够像这样在一个文件上使用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.

点赞