Sed Linux,使用替换项列表在文件文件夹中查找替换?

Sed Linux,使用替换项列表在文件文件夹中查找替换?,sed,Sed,我正在寻找一种使用外部列表(Replace.txt)替换/temp中包含50个文件的文件夹中的文本的方法 我的替换文件Replace.txt类似于以下内容,但包含400多个项目 Old,New Apples, Oranges Mellon, Bananas Car, Train e、 g 我可以使用sed,但是手动添加我的列表不会有效率。我不知道您是否可以使用具有类似代码的外部文件列表进行sed 代码: 有人有什么有用的吗?您可以从输入文件轻松生成sed脚本。。。使用sed sed 's/^/

我正在寻找一种使用外部列表(Replace.txt)替换/temp中包含50个文件的文件夹中的文本的方法

我的替换文件Replace.txt类似于以下内容,但包含400多个项目

Old,New
Apples, Oranges
Mellon, Bananas
Car, Train
e、 g

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

代码:


有人有什么有用的吗?

您可以从输入文件轻松生成
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
。(在正则表达式中,
^
匹配行首,
$
匹配行尾。)

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

也许会注意到,这将愉快地用
pinebanananasauce
替换
菠萝泥
,用
BNewface
替换
黑体
。您或许可以围绕
旧的
文本设计一个更受约束的正则表达式。还请注意,如果
Old
包含正则表达式元字符,则如果希望
sed
逐字替换它们,则应将其转义;所以

s%your *new* friend%your *old* buddy%
是错误的,应该是这样的

s%your [*]new[*] friend%your *old* buddy%

如果目的是将“旧”短语解释为文本。

您可以从输入文件轻松生成
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
。(在正则表达式中,
^
匹配行首,
$
匹配行尾。)

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

也许会注意到,这将愉快地用
pinebanananasauce
替换
菠萝泥
,用
BNewface
替换
黑体
。您或许可以围绕
旧的
文本设计一个更受约束的正则表达式。还请注意,如果
Old
包含正则表达式元字符,则如果希望
sed
逐字替换它们,则应将其转义;所以

s%your *new* friend%your *old* buddy%
是错误的,应该是这样的

s%your [*]new[*] friend%your *old* buddy%

如果目的是将“旧”短语解释为文字。

这很常见,也很容易。谷歌搜索
sed-f-
。顺便说一句,
sed
命令之间用换行符或分号分隔,而不是冒号。因为我对sed不太熟悉,所以我很难找到正确的语法。在发布之前,我已经在谷歌上搜索了答案。这很常见,也很简单。谷歌搜索
sed-f-
。顺便说一句,
sed
命令之间用换行符或分号分隔,而不是冒号。因为我对sed不太熟悉,所以我很难找到正确的语法。在发布之前,我已经在谷歌上搜索了答案。太棒了!我刚刚运行了一个示例,替换项的输出出现问题,它似乎将第一个字符加倍了。Oobbananas TTrainI无法在这里取代它。我想你一定是把剧本转录错了;或者,与您提供的Apple and oranges示例不同,您的真实数据可能包含regex特殊字符。用户在加倍问题上出错,初始列表不正确。非常感谢你的帮助!太棒了!我刚刚运行了一个示例,替换项的输出出现问题,它似乎将第一个字符加倍了。Oobbananas TTrainI无法在这里取代它。我想你一定是把剧本转录错了;或者,与您提供的Apple and oranges示例不同,您的真实数据可能包含regex特殊字符。用户在加倍问题上出错,初始列表不正确。非常感谢你的帮助!