【发布时间】:2015-08-02 20:00:30
【问题描述】:
我是 Unix 新手,我想编写一个脚本来读取文件并将文件中的某些单词替换为其他单词。替换的操作并不难。但是如何通过 Unix 脚本读取文件的内容并对此进行“工作”,以及如何将结果写入新文件?
我应该使用哪些命令?
【问题讨论】:
我是 Unix 新手,我想编写一个脚本来读取文件并将文件中的某些单词替换为其他单词。替换的操作并不难。但是如何通过 Unix 脚本读取文件的内容并对此进行“工作”,以及如何将结果写入新文件?
我应该使用哪些命令?
【问题讨论】:
必须有一百万零一个在线教程以任何语言进行此操作。使用 sed 这很简单:
sed 's/foo/replacement/' in.txt > out.txt
或者作为 perl 单行:
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
【讨论】:
chomp 并在输出时重新添加\n?
你可以试试 Perl 单行:
perl -p -e 's/pattern/replace/g' /path/to/infile > /path/to/outfile
您可以使用-i 标志进行就地替换:
perl -pi -e 's/pattern/replace/g' /path/to/infile
【讨论】:
在 unix 中,您无需编程即可从 shell 和 bash 脚本读取和写入文件。
例如
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 在所有输入行上执行命令并将结果打印到输出。
使用这些乐高积木,您可以构建有用的大型应用程序。
例如创建一个 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
中获得更正后的文本祝你好运。
【讨论】: