2つの特定の文字列間のテキストを削除する


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' 

何か助けは?

回答:



6

dコマンドを使用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

ここでの違いに注意してください-これは範囲内のを削除しますが、質問は2つの文字列間のテキストを削除することを求めています。
ジェフシャラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.