尝试删除txt文件中两个字符串(/*
和*/
)之间的文本,而不删除整行。
假设我有一个包含以下内容的文件:
/* reports */
%report1(email=first@email.com /*second@email.com */,lag=3);
%report2(email=first@email.com /*second@email.com
third@email.com */ ,lag=3);
我想要的输出是
%report1(email=first@email.com, lag=3);
%report2(email=first@email.com
,lag=3);
我尝试了tr
,sed
和awk
的多种组合,但仍无效。
有什么想法吗?请注意,报告2位于两个不同的行,分隔符/*
和*/
也位于不同的行上。
答案 0 :(得分:1)
使用perl:
perl -0777pe 's@/\*.*?\*/@@gs' file.txt
答案 1 :(得分:0)
awk 'BEGIN { RS="/"; ORS="" }\
/^\*/,/\*$/ { f=1; next }\
{ if (f!=0) f=0; else print "/"; print }' file.txt
<强>解释强>
BEGIN { RS="/"; ORS="" }
将记录分隔符设置为"/"
,输出记录分隔符设置为空字符串。
/^\*/,/\*$/ { f=1; next }
跳过以*
开头的文件和以*
结尾的文件之间的任何记录,同时将标记f
设置为1。
{ if (f!=0) f=0; else print "/"; print }
如果设置了标记f
,则取消设置,否则打印/
,并始终打印记录。
此不处理字符串中出现/*
或*/
的情况。
答案 2 :(得分:0)
用于多字符RS的GNU awk:
$ awk -v RS='/[*]|[*]/' -v ORS= 'NR%2' file
%report1(email=first@email.com ,lag=3);
%report2(email=first@email.com ,lag=3);