我试图通过以下脚本替换当前目录中<Route component={P} path="p.html" routeName="p" />
的所有文件中<Route component={L} path="'$variable_to_insert'" routeName="L"\/>
之类的字符串的所有出现
VARIABLE_TO_INSERT=5
egrep -lR '<Route component={P} path="p.html" routeName="p" />' . | tr '\n' '\0' | xargs -0 -n1 sed -i '' 's/<Route component={L} path="'$variable_to_insert'" routeName="L"\/>/g'`
其中$variable_to_insert
早先在shell脚本中定义
答案 0 :(得分:1)
您可以使用find
:
find . -maxdepth 1 -type f | xargs sed -i "s/<Route component={P} path=\"p.html\" routeName=\"p\" \/>/<Route component={L} path=\"$VARIABLE_TO_INSERT\" routeName=\"L\" \/>/g"
# | | | |
# +-------------------- replace this --------------------+ +---------------------------- with this ----------------------------+
Shell变量只能在双引号字符串中替换,这就是我们正在进行sed -i "s/.../.../g"
的原因。
请注意$VARIABLE_TO_INSERT
的情况 - 变量名称区分大小写。
(-maxdepth 1
只抓取当前目录中的文件。您可以将其删除,以便对当前目录和所有子目录中的文件进行递归搜索。)
答案 1 :(得分:0)
使用$ VARIABLE_TO_INSERT而不是$ variable_to_insert,因为shell变量区分大小写。
此外,看起来你错过了s /// g第三个正斜杠。