我有一个包含JSP文件的文件夹。我使用查找和 sed 在某些文件中更改文本的一部分。此文件夹在版本控制下。该命令成功更改了指定模式的所有出现但
问题是,当我将文件夹与远程存储库同步时,我可以看到如此多的修改文件列出,实际上该文件中没有任何更改。我想的白空间是错误的。任何人都可以阐明这件事。
我正在尝试将../../images/spacer
替换为当前文件夹中所有JSP文件中的${pageContext.request.contextPath}/static/images/spacer
我正在使用的命令如下
find . -name '*.jsp' -exec sed -i 's/../../images/spacer/${pageContext.request.contextPath}/static/images/spacer/g' {} ;
在大多数系统中,GREP可以选择递归搜索包含模式的文件,避免find
。
所以,命令将是:
grep -r -l -m1 "../../images/spacer" --include *.jsp |
xargs -r sed -i 's!../../(images/spacer)!${pageContext.request.contextPath}/static/1!g'
说明
grep
和 sed
都可以使用正则表达模式,其中dot字符 .
表示包括点本身在内的任何字符。为了显式指示一个点,必须先用逃脱它。因此,要搜索
..
是必要的,请指定..
,或者可以匹配ab/cd/
现在,关于GREP选项:
-
-m1
在发现第一次发生时避免搜索整个文件时停止搜索。 -
-r
在目录中递归搜索 -
--include *.jsp
仅在具有FILEPAT文件模式的文件中搜索。