當我在命令行中使用「sed」時,它正在工作,但沒有包含在perl腳本中。SED命令不能在perl腳本中工作
一個例子是SED的/ \ S + //克'AAA> BBB
但說當我試圖通過perl腳本
$gf = `sed 's/\s\+//g' aaa > bbb` ;
輸出文件,以調用相同的命令與輸入文件一樣!請建議。
當我在命令行中使用「sed」時,它正在工作,但沒有包含在perl腳本中。SED命令不能在perl腳本中工作
一個例子是SED的/ \ S + //克'AAA> BBB
但說當我試圖通過perl腳本
$gf = `sed 's/\s\+//g' aaa > bbb` ;
輸出文件,以調用相同的命令與輸入文件一樣!請建議。
在Perl,反引號具有相同的逃生和插值規則雙引號的字符串:反斜槓形成一個未知的轉義碼忘記反斜槓,例如"\." eq "."
。
因此,Perl代碼
print `echo \"1\"`;
print `echo \\"1\\"`;
輸出
1
"1"
如果你想嵌入該sed
命令轉換爲Perl,你有逃跑的反斜槓,這樣他們甚至達到sh
ELL:
$gf = `sed 's/\\s\\+//g' aaa > bbb`;
其實,你不會得到任何在將輸出重定向到文件時輸出到$gf
。我們可以只是做
use autodie;
system "sed 's/\\s\\+//g' aaa > bbb";
或用單引號:
use autodie;
system q{ sed 's/\s\+//g' aaa > bbb };
這使反斜線。
不過,這是非常不必要的,因爲Perl可以應用替代本身。
use autodie; # automatic error handling
open my $out, ">", "bbb";
open my $in, "<", "aaa";
while (<$in>) {
s/\s\+//g; # remove all spaces followed by a plus
print {$out} $_;
}
非常感謝......我浪費了更多的時間在這個3小時,你已經在1分鐘內解決了這個問題。非常感謝 – user2508758
您的意思是'sed sed'還是在拼寫錯誤?如果不是拼寫錯誤,你能解釋爲什麼兩個'sed'連續?除了那個非常好和清晰的解決方案! – Floris
@弗洛里斯感謝您發現重複。 – amon
有你在你的文件的頂部有
use strict;
use warnings;
?
,你可以需要反引號執行命令
$gf = `sed 's/\s\+//g' aaa > bbb`;
在這些奇怪的情況下,我確保我運行的是正確的命令。我會建造它,儲存,輸出的命令,所以我可以看到什麼我創建:
my $command = '....';
print "Command is [$command]\n";
my $output = `$command`;
如果你正在運行在Perl sed
,你可能會做它,因爲錯誤的Perl已經可以做所有那。
你能給出一個完整的例子,包括變量'aaa'的perl腳本和值 - 它是如何進入的?你知道'\ s +'與'\ s \ +'不一樣,對吧? – Floris
http://stackoverflow.com/questions/918128/how-can-i-do-bulk-search-and-replace-with-perl – ctn
謝謝..我想下面給出的答案是我正在尋找。 – user2508758