我需要替换一个文件夹中的许多文件中的字符串,只有ssh访问服务器。我该怎么做呢?
当前回答
如果字符串中有正斜杠(/),则可以将分隔符更改为'+'。
find . -type f -exec sed -i 's+http://example.com+https://example.com+g' {} +
该命令将在当前目录中递归地运行。
其他回答
第一行出现的“foo”将被替换为“bar”。你可以用第二行来检查。
grep -rl 'foo' . | xargs sed -i 's/foo/bar/g'
grep 'foo' -r * | awk -F: {'print $1'} | sort -n | uniq -c
下面的命令可以用来首先搜索文件和替换文件:
find . | xargs grep 'search string' | sed 's/search string/new string/g'
例如
find . | xargs grep abc | sed 's/abc/xyz/g'
如果文件包含反斜杠(通常是路径),你可以尝试这样做:
sed -i -- 's,<path1>,<path2>,g' *
ex:
sed -i -- 's,/foo/bar,/new/foo/bar,g' *.sh (in all shell scripts available)
真的很蹩脚,但我不能让任何sed命令在OSX上工作,所以我做了这个愚蠢的事情:
:%s/foo/bar/g
:wn
^-复制这三行到我的剪贴板(是的,包括结束换行),然后:
vi *
按住command-v,直到它显示没有文件了。
愚蠢的…出租汽车司机…有效…
我从另一篇文章中找到了这篇文章(不记得是哪篇了),虽然不是最优雅的,但它很简单,作为一个新手Linux用户,它没有给我带来任何麻烦
for i in *old_str* ; do mv -v "$i" "${i/\old_str/new_str}" ; done
如果有空格或其他特殊字符,请使用\
for i in *old_str\ * ; do mv -v "$i" "${i/\old_str\ /new_str}" ; done
对于子目录中的字符串使用**
for i in *\*old_str\ * ; do mv -v "$i" "${i/\old_str\ /new_str}" ; done