-1

我正在使用 Mac OSX 终端并使用 find 然后对文件执行 sed。我如何让它列出已更改的文件?

这就是我正在使用的:

find . -name '*.js' -exec sed -i '' 's/_persistenceURL = "prod"/_persistenceURL = "qa"/g' {} +

我喜欢它如何输出匹配的文件列表......我可以从 sed 中得到这个吗?

find . -name "*.js" -exec grep -lr "_persistenceURL = \"prod\""  {} \;
4

2 回答 2

1

这是一种快速而肮脏的方法,方法是-exec在 find 语句中添加第二个操作,该操作在 sed 处理文件名之前回显文件名:

find . -name '*.js' -exec echo "{}" \; -exec sed -i '' 's/_persistenceURL = "prod"/_persistenceURL = "qa"/g' {} +

注意:+最后的 可能会干扰一点,所以如果不是绝对必要,我会用\;.

于 2013-01-31T17:08:33.327 回答
0

sed不提供返回值的机制,也无权访问文件名。但你可以这样做:

find . -name '*.js' -exec sh -c \
   'sed "s/_persistenceURL = \"prod\"/_persistenceURL = \"qa\"/g" $0 > $0.$$; \
   if ! cmp $0.$$ $0; then echo $0; mv $0.$$ $0; else rm $0.$$; fi' {} \;

将命令放在脚本中并执行脚本可能会更干净。请注意,这使用内部 shell 的 pid 作为临时文件的后缀。小心,因为这可能会覆盖文件。将命令放在脚本中并添加一些类似的检查。

于 2013-01-31T16:57:17.083 回答