使用Unix或Perl脚本读写文件

时间:2015-05-21 08:52:34

标签: perl file unix

我是Unix新手,我想编写一个读取文件的脚本,并用其他单词替换文件中的一些单词。要更换的操作并不难。但是我如何阅读文件的内容和"工作"通过Unix脚本进行此操作,如何将结果写入新文件?

我应该使用哪些命令?

3 个答案:

答案 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

中获得更正后的文字 祝你好运。