首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换多个文件上第一行中的字符串

替换多个文件上第一行中的字符串
EN

Stack Overflow用户
提问于 2016-11-12 18:35:28
回答 2查看 696关注 0票数 0

我得到了10,000个文本文件,我必须进行修改。

每个文件的第一行包含一个url。

误读“com”的文件不多

代码语言:javascript
复制
eg:
1) http://www.supersonic./psychology 
2) http://www.supersonic./social
3) http://www.supersonic.com/science

我的任务是检查并添加“com”(如果它丢失了)

代码语言:javascript
复制
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

代码语言:javascript
复制
sed -e '1s/supersonic.//supersonic.com/' *

输出没有变化。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-14 17:50:33

您非常接近您的代码,但是您需要说明在/字符之后的尾随.字符。

假设您使用的是带有sed (inplace- -i )选项的现代-i,您可以这样做。

代码语言:javascript
复制
sed -i '1s@supersonic\./@supersonic.com/@' * 

注意,不必在/中转义s/srchpat\/withSlash/replaceStr/',您可以在s命令之后使用另一个字符作为分隔符,这里我使用s@...@...@。如果您的搜索模式有一个@字符,那么您必须使用不同的char。

一些旧版本的sed需要在第一次使用时转义备用分隔符,如下所示

代码语言:javascript
复制
     sed 's\@srchStr@ReplStr@' file 

为了那些案子。

如果使用的是不支持sed选项的-i,则需要对文件进行循环,并管理tmp文件,即

代码语言:javascript
复制
 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

票数 1
EN

Stack Overflow用户

发布于 2016-11-12 19:09:37

  1. 使用-i来更改文件,而不是仅仅输出更改过的行。
  2. 如果要在regex中使用/ (或在regex中使用\/ ),则使用与/不同的分隔符。
  3. 使用\.匹配点字面意思,.匹配任何东西。 sed -i~ -e‘1s=超音速./=suPersonic.com/=’*

有些版本的sed不支持-i

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40566291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档