执行Linux SED命令和版本控制抱怨



我有一个包含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'

说明

grepsed都可以使用正则表达模式,其中dot字符 .表示包括点本身在内的任何字符。为了显式指示一个点,必须先用逃脱它。因此,要搜索..是必要的,请指定..,或者可以匹配ab/cd/

之类的文本

现在,关于GREP选项:

  • -m1在发现第一次发生时避免搜索整个文件时停止搜索。
  • -r在目录中递归搜索
  • --include *.jsp仅在具有FILEPAT文件模式的文件中搜索。

最新更新