![查找:路径必须在表达式之前:'。'查找:谓词'-exec'之后可能存在未引用的模式?](https://linux22.com/image/1070488/%E6%9F%A5%E6%89%BE%EF%BC%9A%E8%B7%AF%E5%BE%84%E5%BF%85%E9%A1%BB%E5%9C%A8%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%B9%8B%E5%89%8D%EF%BC%9A'%E3%80%82'%E6%9F%A5%E6%89%BE%EF%BC%9A%E8%B0%93%E8%AF%8D'-exec'%E4%B9%8B%E5%90%8E%E5%8F%AF%E8%83%BD%E5%AD%98%E5%9C%A8%E6%9C%AA%E5%BC%95%E7%94%A8%E7%9A%84%E6%A8%A1%E5%BC%8F%EF%BC%9F.png)
我需要在后台执行这个命令
sudo find '/abc/abc/' -type f -exec sed 's/domain1\it/domain2\com/g' '{}' \; . &
但我有两个问题:
find: paths must precede expression: `.'
find: possible unquoted pattern after predicate `-exec'?
再次强调,还有其他更快捷的“查找和替换”的智能方法,例如:sudo find '/abc/abc/' -type f -exec sed 's/domain1\it/domain2\com/g' '{}' ; &也许用 grep?
谢谢
答案1
是/abc/abc/
现有目录吗?要搜索的文件在哪里?“ paths must preceed..
”消息是加密消息。解码后,意味着第一个(或前几个)参数find
不是要遍历的目录树find
。由于其余参数是“find
表达式”,因此它抱怨的就是这个。
您正在执行的命令-exec
需要以分号 ( ) 结尾;
。但是,由于分号会终止(解析)命令find
, -exec
因此必须使用反斜杠 ( \
) 对分号进行转义。因此
-exec ...command... \;
欢迎来到“find”魔法的世界。重读“man find”。
你的sed
表述有误。应该是:
sed -e 's/domain1\.it/domain2\.com/'
反斜杠 ( \
) 只是翻转下一个字符上的“特殊处理”标志,因此domain1\it
匹配“ domain1it
”,而不是“ domain1.it
”。 “ \i
”并不特殊,因此它被视为“ i
”。