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

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

我有一个文件如下:

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' 

有什么帮助吗?

答案1

用空字符串替换从PI到 的所有内容:Value:

sed 's/PI.*Value://'

答案2

使用din 命令sed将删除整行。另外,我不确定你为什么使用<and >。也许您将它们与用于表示单词边界的and\<混淆了?在这种情况下,您应该知道这两种类型的单词边界(开头和结尾)的用途。所以你可以写这样的东西:\>grepsed\b

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

为了获得额外的鲁棒性,我将使用perl的延迟量化,以便您只删除第一次出现和 第一次出现.之间的文本。当然,这一切都取决于您的用例。PIValue:

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

答案3

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

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

如果你想直接修改your_file:

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

相关内容