pot*_*ong 3 bash perl awk command-line sed
我有这样一个文件:
Sed eleifend orci eget odio
consequat. Sed sagittis ipsum
eget pulvinar. Sed ut lacus
Sed luctus sollicitudin ligula
varius neque. Sed tincidunt
Sed mauris egestas eget. Sed
Curae; Sed aliquam enim Sed,
Sed dictum quis sem. Sed
volutpat tincidunt. Sed lacus.
Run Code Online (Sandbox Code Playgroud)
我想将其转换为:
Sed eleifend orci eget odio
consequat. Sed sagittis ipsum
eget pulvinar. Sed Sed ut lacus
Sed luctus sollicitudin ligula
varius neque. Sed tincidunt
Sed Sed mauris egestas eget. Sed
Curae; Sed aliquam enim Sed Sed,
Sed dictum quis sem. Sed
volutpat tincidunt. Sed Sed lacus.
Run Code Online (Sandbox Code Playgroud)
Perl one-liner可以通过使用/e修饰符来实现这一点,它允许基于逻辑的替换:
$ perl -pi.bak -e 'BEGIN{ $str = "Sed"; } s/(?<=$str)/ ++$cnt % 3 ? "" : " $str" /ge' file.txt
Run Code Online (Sandbox Code Playgroud)
-pi.bak
逐行就地编辑文件.备份存储在file.txt.bak中
BEGIN 块
指定值$str,仅执行一次
s/PATTERN/REPLACEMENT/ge
$_逐行替换所有匹配的正则表达式.REPLACEMENT评估为Perl代码.
(?<=$str)
固定长度的后视断言
++$cnt % 3 ? "" : " $str"
每第三场比赛,追加" $str",否则不附加任何内容