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

kha*_*aad 15 sed text-processing

我有一个文件如下:

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
Run Code Online (Sandbox Code Playgroud)

我想删除文本PI直到Value:. 我试过

sed '/<PI>/,/<\/Value:>/d' 
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?

小智 25

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

sed 's/PI.*Value://'
Run Code Online (Sandbox Code Playgroud)

  • 如果 `PI` 和 `Value:` 出现在不同的行上,这会起作用吗? (11认同)

Jos*_* R. 6

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

sed -i 's/\bPI\b.*\bValue:\b//' your_file
Run Code Online (Sandbox Code Playgroud)

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

perl -pi -e 's{ \b PI \b .*? \b Value: \b}{}x' your_file
Run Code Online (Sandbox Code Playgroud)


Fer*_*man 6

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

sed "/PI/,/Value:/d" your_file
Run Code Online (Sandbox Code Playgroud)

如果你想直接修改your_file:

sed -i "/PI/,/Value:/d" your_file
Run Code Online (Sandbox Code Playgroud)