2016-02-07 46 views
0

我正在寻找一种方法来使用外部列表(Replace.txt)替换/ temp中的50个文件的文件夹上的文本。Linux,使用替换项目列表找到替换文件的文件夹?

我的替换文件Replace.txt将如下所示,但包含400多个项目。

Old,New 
Apples, Oranges 
Mellon, Bananas 
Car, Train 

例如,

我可以使用sed,但手动添加我的列表不会有效。我不知道你是否可以用sed的类似代码来使用外部文件列表。

代码:

sed -i 's/item1/itemb/g:s/itemc/itemd/g:s/iteme/itemf/g' * 

任何人有什么用?

+0

这很常见,很容易。 Google for'sed -f -'。 – tripleee

+0

顺便说一下,'sed'命令用换行符或分号分隔,而不是冒号。 – tripleee

+0

由于我不熟悉sed,我正在努力寻找正确的语法。在发布之前,我已经搜索了一个答案。 –

回答

0

您可以使用sed从输入文件中轻松生成sed脚本。

sed 's/^/s%/;s/, */%/;s/$/%g/' Replace.txt | sed -f - -i /directory/* 

管道中的第一个命令从替换模式中生成sed脚本;它看起来像

s%Old%New%g 
s%Apples%Bananas%g 

,我们再喂这另一个sed实例,指定标准输入(-)作为文件读取(-f)脚本,并在作为文件要执行这些替换文件名称参数。

s/^/s%/在行开头插入s%s/, */%/只用%取代第一个逗号(带有可选的尾部空格)。 s/$/%g/在每行的末尾添加%g。 (在正则表达式,^行的开头相匹配,和$行的末尾匹配。)

sed的Linux愉快地从标准输入读取的脚本;一些其他平台可能会受到阻碍,或者替换/dev/stdin而不是-作为文件名参数的解决方法。在最坏的情况下,将生成的脚本保存在临时文件中,然后在完成后将其删除。

+0

太棒了! 我刚刚运行一个示例,并且替换项目的输出出现问题,它似乎将第一个字符加倍。 OOranges BBananas TTrain –

+0

我不能在这里取代。我想你会以某种方式不正确地转录剧本;或者您的真实数据可能包含正则表达式特殊字符,而不像您提供的苹果和橙子示例。 – tripleee

+0

加倍问题上的用户错误,初始列表不正确。非常感谢你的协助! –