~から
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)。