Regex 如何从文件中获取查找/替换对的grep/sed?

Regex 如何从文件中获取查找/替换对的grep/sed?,regex,sed,grep,Regex,Sed,Grep,我想使用从一个文件(或者两个文件,如果这使任务更容易的话)中获取的一系列值对来运行查找和替换。find和replace字符串是文本字符串,而不是实际意义上的正则表达式。目前,文件是以制表符分隔的,findstring\t replacestring,每行一对,但我可以根据需要进行更改 我对regex有点了解,但对于Unix命令,我确实需要清楚的“复制和粘贴”说明。在本项目的早些时候,我很高兴发现grep-f可以从文件中查找字符串,但似乎是这样 我可以混合使用grep、sed等吗?上面的线程解释了

我想使用从一个文件(或者两个文件,如果这使任务更容易的话)中获取的一系列值对来运行查找和替换。find和replace字符串是文本字符串,而不是实际意义上的正则表达式。目前,文件是以制表符分隔的,
findstring\t replacestring
,每行一对,但我可以根据需要进行更改

我对regex有点了解,但对于Unix命令,我确实需要清楚的“复制和粘贴”说明。在本项目的早些时候,我很高兴发现
grep-f
可以从文件中查找字符串,但似乎是这样

我可以混合使用grep、sed等吗?上面的线程解释了如何将grep传输到sed,但是我需要告诉sed如何从文件中读取替换字符串


如果有区别的话,我使用的是macOS(自制)。

您可以在名为
命令的文件中创建一个包含
sed
命令列表的文件。sed

s|cat|cats|g
s|dog|dogs|g
s|person|people|g
并在某些输入上使用以下命令运行它:

echo "House mouse cat dog person dog person" | sed -f commands.sed
它将用
取代
取代
取代
,产生:

House mouse cats dogs people dogs people
因此,我们希望使用
sed
,将包含替换的文件转换为这样的命令文件!所以,如果您的替换文件
subs.txt
包含这样的行,每行上有两个单词,用一个制表符分隔:

cat cats
dog dogs
person  people
这将是:

sed -e 's/^/s|/' -e $'s/\t/|/' -e 's/$/|g/' subs.txt > commands.sed
然后您可以将其应用于:

sed -f commands.sed SomeFile

我们可以像这样运行
过程替换
来动态生成它们,而不是使用中的命令创建一个文件,并使用以下工具一次性完成这一切:

echo "House mouse cat dog person dog person" | sed -f <(sed -e 's/^/s|/' -e $'s/\t/|/' -e 's/$/|g/' subs.txt)

echo“家鼠猫狗人狗人”| sed-f@CharlesButcher:。这是一个很好的解决方案,但请注意,一旦您将
替换为
,会发生什么情况。现在
dog
将匹配
dogs
,如果再次运行脚本,您将得到
dogss
;-)道德的存在,总是在复制你的数据。如果发现错误,重新运行程序会使问题更加复杂;-!祝大家好运。请注意,如果您有成千上万的文件要处理,您可以只生成一次命令文件,并将其与GNU并行应用到所有文件中—请提问。@MarkSetchell非常感谢您如此仔细、耐心和准确的讲解。它在第一次尝试时起了作用——好吧,第二次,但那是因为我的
subs.txt
选项卡前有一个不需要的空间。这是一个很好的结果,我为未来学到了很多。@Sheller说得好,谢谢!我已经在文字处理程序中多次搞砸了搜索和替换,所以我学会了小心…