我需要删除,
和(
之间的多条线,包括第一次出现时的模式。
示例
Test ,
this
is the
deletion
part
(
done...
预期输出
Test
done
我已尝试使用sed实现以上输出,但它只返回整个文件数据。
sed 's/,*(//' file
提前致谢。
答案 0 :(得分:2)
awk
更适合:
awk '/,/{p=1; sub(/[ \t]*,.*/, ""); print} !p; /\(/{p=0}' file
Test
done
或者您也可以使用perl
:
perl -i -0777 -pe 's/\h*,.*\(//s' file
或者这个带有否定字符类的正则表达式不需要s
修饰符:
perl -i -0777 -pe 's/\h*,[^(]*\(//' file
答案 1 :(得分:1)
使用sed:
sed '/Test/,/done/{//!d;s/ ,$//}' file
/Test/,/done/
:从匹配Test
的行到下一行匹配done
:
//!d
删除除地址匹配的所有行(Test ,
和done
)s/ ,$//
从地址,
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed -z 's/,[^(]*(//g' file
将整个文件粘贴到内存中,全局替换,
和(
之间的所有字符。
答案 3 :(得分:0)
awk '{sub(/ ,|\.../,"")}NR==1;END{print}' file
Test
done