【发布时间】:2012-01-04 20:15:14
【问题描述】:
我经常需要在文件中进行多次替换。为了解决这个问题,我创建了两个文件old.text 和new.text。第一个包含必须找到的单词列表。第二个包含应该替换那些单词的列表。
- 我的所有文件都使用 UTF-8 并使用各种语言。
我已经构建了这个脚本,我希望可以替换它。首先,它一次读取一行 old.text,然后将 input.txt 中该行的单词替换为 new.text 文件中的相应单词。
#!/bin/sh
number=1
while read linefromoldwords
do
echo $linefromoldwords
linefromnewwords=$(sed -n '$numberp' new.text)
awk '{gsub(/$linefromoldwords/,$linefromnewwords);print}' input.txt >> output.txt
number=$number+1
echo $number
done < old.text
但是,我的解决方案效果不佳。当我运行脚本时:
- 在第 6 行,
sed命令不知道$number的结束位置。 -
$number变量正在更改为“0+1”,然后是“0+1+1”,此时它应该更改为“1”,然后是“2”。 -
awk行似乎除了将 input.txt 完全复制到 output.txt 之外,没有做任何其他事情。
你有什么建议吗?
更新:
标记的答案效果很好,但是,我经常使用此脚本,并且需要很多小时才能完成。因此,我提供了一个可以更快完成这些替换的解决方案的赏金。 BASH、Perl 或 Python 2 中的解决方案是可以的,只要它仍然兼容 UTF-8。如果您认为使用 Linux 系统上常用的其他软件的其他解决方案会更快,那也可以,只要不需要大量依赖即可。
【问题讨论】:
-
您考虑过使用
sed吗? -
我已经更新了脚本。
sed -i "s/ $i / $j /g" ./main.file- 在此操作中添加了空间。如果它不起作用,请告诉我,我们可以进一步研究。 -
您是否尝试过合并这两个文件并将其作为您的 sed 脚本文件?
-
我为此添加了另一个答案。不知道添加另一个而不是编辑现有的是否是个好主意。但希望它有所帮助。
-
我认为最快的解决方案可以很容易地用 C 编写。您是否只考虑脚本语言?
标签: ruby perl bash python-2.7