2015-05-21 58 views
-1

我是Unix中的新手,我想編寫腳本讀取文件並用其他詞替換文件中的某些單詞。替換操作並不難。但是,如何通過Unix腳本讀取文件的內容和「工作」,以及如何將結果寫入新文件?使用Unix或Perl腳本讀取和寫入文件

我應該使用哪些命令?

回答

3

必須有一百萬和一個在線教程來做到這一點在任何語言。使用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 
+0

爲什麼'chomp'並重新添加'\ N'上輸出? –

1

在unix中,您可以讀取文件並從t中寫入文件他沒有編程就使用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

祝你好運。

+0

@RobEarl感謝-n -p修復。我不知道-p包含-n。每天學習。 –

1

您可以嘗試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