繁体   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