2016-04-24 105 views
0

我一直在试图找到如何在Mac OS X的终端上执行批量查找和替换操作超过过去一小时。我发现了不同版本的代码,但难以实现。到目前为止,我已经找到了一串可以工作的代码,但它只适用于一个词/字符。批量查找和替换的终端命令

我想要做的是在同一时间在一个文本文件中查找和替换多个字符。

例如:

查找§,与ก
查找Ø取代,与ด
查找替换≠, 与ห
查找£取代,与้

的代码替换迄今为止的作品是(但仅针对一个字符):

sed -i '' s/Ø/ด/ [textfile.txt] 

可以请帮助我吗?

+0

我读的例子的第一行用“不明确的东西”代替“段落标志”,可能来自非拉丁字母。段落符号是你的意思,还是字符编码有问题? – gboffi

+0

这是由于非拉丁字符。找到的我认为是拉丁文,但不是替代品。 – samseva

+0

是的,段落符号是我的意思(以及“不等于”和英镑符号)。 – samseva

回答

0

你的使用模式是很常见的,有特定的实用工具,您可以使用它,即tr

tr abc ABC <input.txt> output.txt 

在您使用两个字符串(这里abcABC),以就换人您指示tr想要(在此,用A替代a,bB等)。


随着sed,这是MUCH在其相对于使用更普遍以tr,在每一行,以搜索和替换第一次出现是

sed 's/src1/rep1/' <in> out 

进行搜索,并在每行替换所有出现你添加一个g切换到s命令

sed 's/src1/rep1/g' <in> out 

最终做多的搜索d取代你必须用分号

sed 's/src1/rep1/g;s/src2/rep2/;s/src3/rep3/g' <in> out 

注意,在上面的例子中,我使用的g开关(行明智全局替换)为第1分隔s命令和第三找到&替换而不是第二一个......你的使用可能会有所不同,但我希望你已经发现了这个模式,不是吗?

+0

我试过了代码,它的工作原理。但是,您是否知道要添加哪些代码,以便一次可以找到并搜索多个单词/字符? – samseva

+0

尝试了代码。我将介绍所有信息,以确保一切正常。 1.我创建了一个名为“TestBefore.txt”的txt文件,其中包含文本“¢‡≠§Øħæõ/Î‡Ω”。 2。在终端(已删除的用户)中输入以下代码:'sed's /¢/ก/;; s /§/ด/; s /Ä/า/ g'> /Users/[...]/Desktop/TestBefore .txt>/Users/[...。]/Desktop/TestAfter.txt。这创建了一个新的“TestAfter.txt”文件,但没有文字。这也删除了最初的“TestBefore.txt”文件中的所有文本。这是怎么发生的? – samseva

+0

我的错误是,在第一个和第二个示例中,我使用了'< in > out',但在第三个示例中(您复制的那个)我错误地输入了> out>,这是您在测试中复制的内容,这两个“更大”的标志。 “minor”表示“从下面的文件中获取输入”,而“greater”表示“将输出放在下面的文件中”,所以我们所做的是错误的,尝试'/Users /[...]/ Desktop/TestAfter.txt' ---请注意,我将编辑我的答案以纠正错误。 – gboffi