我得到了10,000个文本文件,我必须进行修改。
每个文件的第一行包含一个url。
误读“com”的文件不多
eg:
1) http://www.supersonic./psychology
2) http://www.supersonic./social
3) http://www.supersonic.com/science我的任务是检查并添加“com”(如果它丢失了)
eg:
1) http://www.supersonic.com/psychology
2) http://www.supersonic.com/social
3) http://www.supersonic.com/science所有的urls都属于相同的域(supersonic.com)
你能给我建议一下快速简便的方法吗?
尝试过这样做:用supersonic./替换supersonic.com
sed -e '1s/supersonic.//supersonic.com/' *输出没有变化。
发布于 2016-11-14 17:50:33
您非常接近您的代码,但是您需要说明在/字符之后的尾随.字符。
假设您使用的是带有sed (inplace- -i )选项的现代-i,您可以这样做。
sed -i '1s@supersonic\./@supersonic.com/@' * 注意,不必在/中转义s/srchpat\/withSlash/replaceStr/',您可以在s命令之后使用另一个字符作为分隔符,这里我使用s@...@...@。如果您的搜索模式有一个@字符,那么您必须使用不同的char。
一些旧版本的sed需要在第一次使用时转义备用分隔符,如下所示
sed 's\@srchStr@ReplStr@' file 为了那些案子。
如果使用的是不支持sed选项的-i,则需要对文件进行循环,并管理tmp文件,即
for f in *.html ; do
sed '1s@supersonic\./@supersonic.com/@' "$f" > /tmp/"$f".fix \
&& /bin/mv /tmp/"$f".fix "$f"
done警告
但是,在讨论10,000+files时,您需要在使用这两种解决方案之前进行一些测试。将这些文件的良好随机集复制到/tmp/mySedTest/ dir,并在那里运行其中一个解决方案,以确保没有意外。
而且您可能会用MAX_SIZE文件破坏cmd行的10,000+,所以请阅读有关find和xargs的内容。这里有很多关于[sed] find xargs的帖子。如果需要的话检查一下。
IHTH
发布于 2016-11-12 19:09:37
-i来更改文件,而不是仅仅输出更改过的行。/ (或在regex中使用\/ ),则使用与/不同的分隔符。\.匹配点字面意思,.匹配任何东西。
sed -i~ -e‘1s=超音速./=suPersonic.com/=’*有些版本的sed不支持-i。
https://stackoverflow.com/questions/40566291
复制相似问题