更新:
- Stephane https://unix.stackexchange.com/a/521560/354415在这里给出了这个 MULTILINE 问题的真正答案
- 或者通过 Terdon 逐行使用 perl:https ://unix.stackexchange.com/a/521512/354415
- 或者,我自己在这里逐行与 IFS:https ://unix.stackexchange.com/a/521550/354415
这是我的新玩具:
问题是我希望它只匹配参数前面没有 #\s* 的行。
请不要提供替代代码,例如 sed 等。使用 perl
perl -we 'my $file= "parameter=9
# parameter=10
parameter=10
"; $file=~ s/.*((?<!^# ))parameter\s*=.*/parameter=replaced/g; print(":$file:\n")'
预期产出
parameter=replaced
# parameter=10
parameter=replaced
PS,如果您有兴趣了解我的进展情况,请看这里:Perl Negative Lookbehind with variable length bypass 也许?
输出:
该
sed
代码只是将替换应用于所有不以#
字符开头的行。这会因您选择将多行字符串作为单个变量传递而变得复杂。将其转换为数组要容易得多,因此您可以
s///
以最简单的形式使用运算符。试试这个:你说你对代码改进不感兴趣,但为了帮助未来的用户,这是你写的一个简化版本,它也避免了将 ALLCAPS 用于非环境变量的不良做法:这将返回:
或者,更短一点:
这就是它的完成方式)))
输出:
称为负向后看 http://www.blackwasp.co.uk/RegexLookahead.aspx
感谢 Kusalananda 提供这个想法。
我永远不会想到它。