我是Unix新手,我想编写一个读取文件的脚本,并用其他单词替换文件中的一些单词。要更换的操作并不难。但是我如何阅读文件的内容和"工作"通过Unix脚本进行此操作,如何将结果写入新文件?
我应该使用哪些命令?
答案 0 :(得分:3)
在任何语言中都必须有一百万个在线教程。使用sed这很简单:
sed 's/foo/replacement/' in.txt > out.txt
或作为perl one-liner:
perl -ne 's/foo/replacement/g; print' in.txt > out.txt
在perl脚本中:
use warnings;
use strict;
open my $file, '<', 'in.txt' or die $!;
open my $out, '>', 'out.txt' or die $!;
while(<$file>){
s/foo/replacement/g;
print $out "$_\n";
}
--- in.txt ---
foo
bar
baz
one
two
three
答案 1 :(得分:2)
你可以试试Perl one liner:
perl -p -e 's/pattern/replace/g' /path/to/infile > /path/to/outfile
您可以使用-i
标志进行就地替换:
perl -pi -e 's/pattern/replace/g' /path/to/infile
答案 2 :(得分:1)
在unix中,您可以从文件读取并从shell和bash脚本中写入文件而无需编程。
e.g。
echo "the quick brown fox jumps over the lazy cat" >test.txt
会将此文本写入 test.txt 文件。
cat test.txt >test_copy.txt
将读取该文件并将其写入 test_copy.txt
这不是很有用,因为 cp 输入较少,但是......
您可以在其间添加小应用程序:
cat test.txt | perl -p -e 's/cat/dog/' >corrected_test.txt
这将调用perl将错误的动物替换为正确的动物。 -p 参数告诉perl在所有输入行上执行命令并将结果打印到输出。
使用这些乐高积木,您可以构建有用的更大的应用程序。
e.g。创建 fix_cat.sh 文件(将是 bash 脚本)
#!/bin/bash
cat $1 \
| perl -n -p -e 's/cat/dog/' \
> $2
并执行 chmod + x fix_cat.sh ,以使bash脚本可执行。 (行末尾的\表示让相同的行在下一行继续,读起来更容易,并且可以方便地在它们之间添加更正。)
现在你可以
$./fix_cat.sh test.txt new_text.txt
您将在 new_text.txt
中获得更正后的文字 祝你好运。