删除两个特定字符串之间的文本


10

我有一个如下文件:

mime PI Name: ISHO SUCCESS RATE RT, Value: 95.663826
scr  PI Name: RRC Access Failures due to UU, Value: 0.13394141
prog PI Name: RRC Access Failures due to UU, Value: 0.16077702
sch PI Name: RRC Access Failures due to UU, Value: 0.11781933

我要删除文本PI直到Value:。我试过了

sed '/<PI>/,/<\/Value:>/d' 

有什么帮助吗?

Answers:



6

使用din命令sed将删除整行。另外,我不确定您为什么使用<>。也许你混淆他们\<\>grep用途来表示字边界?在这种情况下,您应该知道这两种类型的单词边界都sed使用\b(开始和结束)。所以你可以这样写:

sed -i 's/\bPI\b.*\bValue:\b//' your_file

为了提高鲁棒性,我将使用perl的惰性量化,.以便仅删除的第一次出现PI和之间的文本Value:。当然,这完全取决于您的用例。

perl -pi -e 's{ \b PI \b .*? \b Value: \b}{}x' your_file

1

使用以下代码删除模式之间的多行(包括带有模式的行):

sed "/PI/,/Value:/d" your_file

如果要直接修改your_file:

sed -i "/PI/,/Value:/d" your_file

注意这里的区别-这将删除线的范围内,而这个问题是要求删除文本两个字符串之间。
杰夫·谢勒
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.