[英]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.