簡體   English   中英

在 perl 中的 bash 中轉義

[英]Escaping in bash within perl

我在 perl 中運行一些東西並有以下命令,它刪除連續的重復行(只保留其中之一)

system("sed -i '$!N; /^\\(.*\\)\\n\\1$/!p; d' *[13579].csv");

但是,當我運行它時,出現以下錯誤:

sed: -e expression #1, char 11: unterminated address regex

我有一種感覺,這與我的逃避有關,但我不太確定,因為我對 perl 和 bash 缺乏經驗。 我知道美元符號應該被轉義,但是反斜杠呢? 有沒有人有很好的資源可以指點我以了解有關在 perl 中轉義 bash 的更多信息? 謝謝!

將 sed 放入 Perl 時可能會很麻煩,您可以做幾件事。 第一個是更改您在命令系統運行時環繞的引號類型和 sed 模式(將外部翻轉為單,內部翻轉為雙); 另一種選擇是轉義 sed 中的\\字符。

system('sed -i "$!N;/^\(.*\)\n\1$/!p;d" *filename');

注意:由於您的文件名使用特殊字符,因此可能需要轉義才能使用通配符(例如*\\\\[13579].csv ); 轉義將是這樣的:

system("sed -i '$!N;/^\\(.*\\)\\n\\1\$/!p;d' *\\[13579].csv");

如果您的文件名碰巧包含空格,那么這些也需要轉義。

system("sed -i '$!N;/^\\(.*\\)\\n\\1\$/!p;d' *\\[12345]\\ \\[13579].csv");

sed然后會找到任何匹配*[12345] [13579].csv並就地編輯它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM