删除两个参数之间的数据,不包括 PERL 中的参数
Delete data between two parameters excluding the parameters in PERL
我想删除两个参数 ) 和 ; 之间的任何数据,不包括 第一次出现的参数
目前正在删除包括参数。
猫input.txt
) delete;
Test
Test
)delete;
perl -0777 -pe 's/\Q)\E.*?\Q;\E//' input.txt
当前输出:
Test
Test
)delete;
预期输出:
) ;
Test
Test
)delete;
如何排除参数?
有帮助吗?
也感谢 awk 中的任何新解决方案。
如果您只想删除 ) 和 ; 之间第一次出现的字符串(通过查看您的预期输出)然后以下内容可能会对您有所帮助。
awk '!n{n=sub(/^\).*\;/,") ;")} 1' Input_file
输出如下。
) ;
Test
Test
)delete;
解释: 所以在这里检查变量 n 的值是否为 NULL,在对 ).*;
进行单个替换之前它将为 null。因此,一旦它通过该条件,它就会使用 awk 的 sub 关键字来替换从 ) 到 ; 的所有内容。使用 );
并保存它的响应,现在将是 1,因为已经进行了 1 次替换,所以下次这个条件 (!n) 永远不会为真,因此它只会替换第一次出现的 ).*;
. 1 表示它将打印 Input_file.
的行
只需指定要使用的替代品:
perl -0777 -pe 's/\Q)\E.*?\Q;\E/);/'
's/\).*?;/);/'
可能更具可读性。
您还可以使用环视:
's/(?<=\)).*?(?=;)//'
即前面是 )
,后面是 ;
,但它们不属于匹配的子字符串。
使用 GNU awk
$ cat infile
) delete;
Test
Test
)delete;
$ awk '!f{print f=gensub(/(\)).*(;)/,"\1 \2","a");next}1' infile
) ;
Test
Test
)delete;
awk '{sub(/. delete./,") ;")}1' file
) ;
Test
Test
)delete;
我想删除两个参数 ) 和 ; 之间的任何数据,不包括 第一次出现的参数
目前正在删除包括参数。
猫input.txt
) delete;
Test
Test
)delete;
perl -0777 -pe 's/\Q)\E.*?\Q;\E//' input.txt
当前输出:
Test
Test
)delete;
预期输出:
) ;
Test
Test
)delete;
如何排除参数? 有帮助吗?
也感谢 awk 中的任何新解决方案。
如果您只想删除 ) 和 ; 之间第一次出现的字符串(通过查看您的预期输出)然后以下内容可能会对您有所帮助。
awk '!n{n=sub(/^\).*\;/,") ;")} 1' Input_file
输出如下。
) ;
Test
Test
)delete;
解释: 所以在这里检查变量 n 的值是否为 NULL,在对 ).*;
进行单个替换之前它将为 null。因此,一旦它通过该条件,它就会使用 awk 的 sub 关键字来替换从 ) 到 ; 的所有内容。使用 );
并保存它的响应,现在将是 1,因为已经进行了 1 次替换,所以下次这个条件 (!n) 永远不会为真,因此它只会替换第一次出现的 ).*;
. 1 表示它将打印 Input_file.
只需指定要使用的替代品:
perl -0777 -pe 's/\Q)\E.*?\Q;\E/);/'
's/\).*?;/);/'
可能更具可读性。
您还可以使用环视:
's/(?<=\)).*?(?=;)//'
即前面是 )
,后面是 ;
,但它们不属于匹配的子字符串。
使用 GNU awk
$ cat infile
) delete;
Test
Test
)delete;
$ awk '!f{print f=gensub(/(\)).*(;)/,"\1 \2","a");next}1' infile
) ;
Test
Test
)delete;
awk '{sub(/. delete./,") ;")}1' file
) ;
Test
Test
)delete;