使用grep和xargs,避免';未终止的报价';错误

使用grep和xargs,避免';未终止的报价';错误,grep,xargs,Grep,Xargs,我已经够沮丧的了,我想是时候问个问题了 我试图在一个网站上替换一个硬编码为1000页的电子邮件地址。它在FreeBSD6.3服务器上 以下是我正在使用的命令: grep-R——匹配“Email\@domain.com”的文件排序| uniq | xargs perl-pi-e's/Email\@domain.com/Email\@newdomain.com/'*.html 下面是我不断得到的错误: xargs:未终止的报价 奇怪的是,当我在一个包含3个文件(嵌套结构)的测试用例上运行该命令时,它

我已经够沮丧的了,我想是时候问个问题了

我试图在一个网站上替换一个硬编码为1000页的电子邮件地址。它在FreeBSD6.3服务器上

以下是我正在使用的命令:

grep-R——匹配“Email\@domain.com”的文件排序| uniq | xargs perl-pi-e's/Email\@domain.com/Email\@newdomain.com/'*.html

下面是我不断得到的错误:

xargs:未终止的报价

奇怪的是,当我在一个包含3个文件(嵌套结构)的测试用例上运行该命令时,它运行得很好。我一直在谷歌上搜索,大多数解决方案似乎都是在搜索后添加一个-print0。在xargs之后是-0。然而,这会产生一系列不同的错误,让我相信我把东西放错地方了


提前感谢您的帮助

为什么要将HTML文件列表提供给xargs?该程序从管道中获取其文件列表(grep的输出)。

为什么要将HTML文件列表提供给xargs?该程序从管道中获取其文件列表(grep的输出)。

Pax是正确的。我想进一步修正如下:

grep -R --files-with-matches 'Email\@domain.com' . -print0 | xargs -0 perl -pi -e 's/Email\@domain.com/Email\@newdomain.com/'
编辑:

感谢kcwu,这是完整的FreeBSD:

grep -R --files-with-matches 'Email\@domain.com' . --null | xargs -0 perl -pi -e 's/Email\@domain.com/Email\@newdomain.com/'
注意,我已经删除了sort和uniq--没有匹配的文件被记录为“第一次匹配时停止”,这样您就不会得到重复的文件-print0和-0确保(并处理)以null结尾的文件列表,这一点至关重要,因为POSIX允许文件名包含换行符

请注意,我不知道perl,但我假设该部分大致相当于:

sed -i s/Email\@domain.com/Email\@newdomain.com/g

帕克斯是对的。我想进一步修正如下:

grep -R --files-with-matches 'Email\@domain.com' . -print0 | xargs -0 perl -pi -e 's/Email\@domain.com/Email\@newdomain.com/'
编辑:

感谢kcwu,这是完整的FreeBSD:

grep -R --files-with-matches 'Email\@domain.com' . --null | xargs -0 perl -pi -e 's/Email\@domain.com/Email\@newdomain.com/'
注意,我已经删除了sort和uniq--没有匹配的文件被记录为“第一次匹配时停止”,这样您就不会得到重复的文件-print0和-0确保(并处理)以null结尾的文件列表,这一点至关重要,因为POSIX允许文件名包含换行符

请注意,我不知道perl,但我假设该部分大致相当于:

sed -i s/Email\@domain.com/Email\@newdomain.com/g
使用GNU并行:

grep -R --files-with-matches 'Email\@domain.com' . | sort | uniq | parallel -q perl -pi -e 's/Email\@domain.com/Email\@newdomain.com/g'
观看介绍视频了解更多信息:

使用GNU并行:

grep -R --files-with-matches 'Email\@domain.com' . | sort | uniq | parallel -q perl -pi -e 's/Email\@domain.com/Email\@newdomain.com/g'

观看介绍视频了解更多信息:

感谢您的快速回复。当我尝试添加-print0时,我会得到以下内容:jhmail#grep-R——匹配“FineArt\@westliveson.com”的文件-print0 | xargs-0 perl-pi-e's/FineArt\@westliveson.com/FA\@westliveson.com/'grep:invalid option--p用法:grep[option]。。。模式[文件]。。。有关详细信息,请尝试“grep--help”。在FreeBSD上,使用“-null”而不是“-print0”完美!非常感谢你们的帮助。非常感谢。谢谢您的快速回复。当我尝试添加-print0时,我会得到以下内容:jhmail#grep-R——匹配“FineArt\@westliveson.com”的文件-print0 | xargs-0 perl-pi-e's/FineArt\@westliveson.com/FA\@westliveson.com/'grep:invalid option--p用法:grep[option]。。。模式[文件]。。。有关详细信息,请尝试“grep--help”。在FreeBSD上,使用“-null”而不是“-print0”完美!非常感谢你们的帮助。非常感谢。