2013-02-12 56 views
1

我有一個html文件的目錄,我想在其中刪除所有內容(包括)匹配的表達式。我已經試過我找的這個(其中字符串XXXXXX我們:Perl或Sed命令在匹配表達式之前刪除內容

perl -pi -e "$a++if s/.*XXXXXX.*//si;$a||s/.*//s" *.html 

我收到此錯誤(在那裏,當我按下回車鍵,正在改變我的命令,請參見第一行):

perl -pi -e "$a=1 if *.htmla && s/.*XXXXXX.*//is; s/.*//s if *.htmla" *.html 
Bareword found where operator expected at -e line 1, near "*.htmla" 
    (Missing operator before htmla?) 
Bareword found where operator expected at -e line 1, near "*.htmla" 
    (Missing operator before htmla?) 
syntax error at -e line 1, near "=" 
syntax error at -e line 1, near "*.htmla 
" 
Execution of -e aborted due to compilation errors. 

Perl的命令任何幫助使用?

+0

你使用哪個操作系統? – 2013-02-12 22:08:50

回答

1

嘗試使用

' 

,而不是

" 

否則你的shell會擴展$ a。

perl -pi -e "$a++if s/.*XXXXXX.*//si;$a||s/.*//s" *.html 

應該這樣做。

0

如果您想要刪除所有行,直到符合某些正則表達式的行。

你可以給一個範圍sed和從第一行刪除,直至及包括比賽

sed -i -e '1,/match/d' file.html 

如果你想刪除的每一行的內容,其匹配的正則表達式

sed -i -e 's/.*match//' file.html 
+0

期望在第二個'sed'命令中的表達式應該在*匹配之後有一個。*,例如'sed's /^.* match。* $ //'file.html> file.bak',查看結果然後重命名file.bak覆蓋fi​​le.html – 2013-02-12 23:42:53

+0

@HappyGreenKidNaps這將清除整個行。編輯是通過'-i'選項完成的。如果您需要備份文件,請改用'-i.bak'。 – 2013-02-12 23:50:15

+0

沒錯 - 它會清除*(即清空)該行,但不會將其刪除。我認爲這就是你所說的「*刪除每一行中與正則表達式匹配的內容」,而不是「......刪除...」。另外,根據OP,擁有。*之前和之後似乎是他想要的。我知道'-i'選項的作用;我只是個人勸阻而已;因人而異。 – 2013-02-13 19:13:05

0

相當於'而不是"

變量插入" - 引用材料; shell可以做到這一點,Perl也是如此。

在這種情況下,您的shell將在將結果提供給Perl之前將其值替換爲$a。 結果是非法的Perl語法。

+0

mikyra已經說過 – 2013-02-12 22:17:08

相關問題