sed - 如何在字符串中忽略许多特殊字符

时间:2017-04-11 08:24:59

标签: shell sed scripting

我在大型shell脚本中有很多shell命令。我想评论其中许多人。例如

exec_cmd "mkdir -p $dockerHome/devicemapper/devicemapper"

我可以用以下代码替换此命令:

sed -i -e "s/exec_cmd \"mkdir \-p \$dockerHome\/devicemapper\/devicemapper\"/\#exec_cmd \"mkdir \-p \$dockerHome\/devicemapper\/devicemapper\"/g" check

现在,文件中有很多这样的命令。有没有办法写一个sed命令,一次忽略所有特殊字符,否则替代似乎是在要替换的字符串中的所有特殊字符前加一个反斜杠。

1 个答案:

答案 0 :(得分:1)

Perl救援。

它的quotemeta函数为你引用了所有的元字符。

#! /usr/bin/perl -pl
use warnings;

BEGIN {
    $regex = join '|', map quotemeta, split /\n/, << '__LIST__';
exec_cmd "mkdir -p $dockerHome/devicemapper/devicemapper"
another command to be commented
__LIST__

    $regex = qr/^($regex)$/;
}

s/$regex/$1 ? "# $1" : $_/e

只需填写脚本行,即可在__LIST__之前发表评论。保存到文件,以

运行
perl script.pl input-file > output-file

要直接编辑输入文件,您可以使用-i选项。