我在Perl腳本中調用perl單行程。Perl單行程從文件中刪除尾隨空間
單線程的目的是從文件中刪除尾部空格。
裏面的主要Perl腳本:
`perl -pi -e 's/\s+$//' tape.txt`;
現在它扔我一個錯誤Substitution replacement not terminated at -e line 2.
它在哪裏的問題呢?
我在Perl腳本中調用perl單行程。Perl單行程從文件中刪除尾隨空間
單線程的目的是從文件中刪除尾部空格。
裏面的主要Perl腳本:
`perl -pi -e 's/\s+$//' tape.txt`;
現在它扔我一個錯誤Substitution replacement not terminated at -e line 2.
它在哪裏的問題呢?
倒引號語法調用一個外殼和調用時,外殼就認爲它應該插值傳遞的字符串。
一個更清晰的語法可能是:
system('perl -pli -e "s/\s*$//" tape.txt');
既然你沒有捕捉命令的輸出,以代替system
使用反引號或qx
是不是一個問題。
太,加-l
開關autochomps每行讀取和然後添加一個換行符---可能是你想要的。
謝謝@JRFerguson –
這是因爲您的主perl腳本中的$/
(特殊變量)。請注意,變量在``
字符串內插入,就像""
字符串內部一樣,並且其中存在一些單引號的事實不會改變該字符串。你需要逃脫$
:
`perl -pi -e 's/\s+\$//' tape.txt;`
試過這個,但是它不能代替尾隨空格 –
你也需要轉義\。如果你打開了警告,你會看到:'無法識別的轉義'通過' – tinita
'$ cmd =「perl -pi -e's/\\ s * \ $ //'tape.txt」;' '系統($ cmd);' 現在它替換\ n字符也 @tinita現在在哪裏破? –
\ s匹配[\ t \ n \ r \ f]並且不想匹配\ n。對於SUBST分隔符
注意使用{}:
$ echo -e 'hi \nbye'| perl -pe 's{[\t\040]+$}{};' | cat -A
hi$
bye$
這將是一個更好的設計不這樣做。爲什麼不在腳本中做你需要做的事情,而不是從外部調用另一個Perl實例? – dan1111
@ dan1111下面是情況 - 有一個外部程序在我的腳本讀取文件之前使用輸入文件。現在這個外部程序由於文件尾部空間而失敗。 所以我想1)刪除尾部空間2)將更新後的文件傳遞給外部程序3)從程序中獲取確認4)開始用腳本 –
中的文件做東西如果做這樣的事情,總是要確保你的命令看起來像你認爲它:我的$ cmd =「perl -pi ...」;警告「cmd:'$ cmd'」; '$ cmd' – tinita