~から

~から

~から

White
Black
Green1
Red1
Yellow1
Blue
----
White
Black
Green2
Red2
Yellow2
Blue
----
White
Black
Green3
Red3
Yellow3
Blue

到着

White
Black
Green1
Red1
Yellow1
Blue
----
White
Black
Green2
REDRED22
Yellow2
Blue
----
White
Black
Green3
Red3
Yellow3
Blue

答え1

sed 's/Red2/REDRED22/'

例:

sed 's/Red2/REDRED22/' redred 
White
Black
Green1
Red1
Yellow1
Blue
----
White
Black
Green2
REDRED22
Yellow2
Blue
----
White
Black
Green3
Red3
Yellow3
Blue

元のファイルは次のとおりです。

cat redred 
White
Black
Green1
Red1
Yellow1
Blue
----
White
Black
Green2
Red2
Yellow2
Blue
----
White
Black
Green3
Red3
Yellow3
Blue

答え2

Perl互換の一般的な検索は次のとおりです。

(?<=Green2\n).*(?=(\n.*)+Yellow2)

私の知る限り、「前」と「後」モードはGreen2とYellow2で、Green2以降の行全体を選択する必要があります。このパターンは、Yellow2の前に行がさらにある場合にも機能します。しかし、sedのエスケープ要件のため、これを達成することは困難です。

Perlでは、次のようにします。

perl -0777 -pe 's/(?<=Green2\n).*(?=(\n.*)+Yellow2)/REDRED22/g' /path/to/file

答え3

私はこれを非常に遅く知っていましたが、これを行うためにsedを使用する課題に抵抗することはできませんでした。

redredというファイルにテキストを配置します。

sed -E ':a;N;$!ba;s/(Green2\n)([a-zA-Z]*)([0-9]*)(\nYellow2)/\1\2\2\3\3\4/g' redred

使用これ\n を sed で読み取る技術と対象を分解して再構成するための位置マーカーを処理します。

また、テキストと数字で構成されるターゲット(Aubergine123など)を[[:alpha:]]コンポーネントと[[:digit:]]コンポーネントに分割し、OPが必要に応じてターゲット文字列を再構築します(AubergineAubergine123123)。

関連情報