1

初心者に手を差し伸べるために、SEDウィザードが何人か必要です....

SED を使用して、いくつかのプレースホルダー間のテキストを置き換えています。問題は、それらが別々の行にあることです (そして、SED は明らかにそれを嫌っています)。

置き換える必要があるテキストは、次のように「#SO」と「#EO」の間です。

#SO
I need to replace this text
#EO

私はこれを思いついた:

sed -ni '1h; 1!H; ${ g; s/#SO\(.*\)#EO Test/1/REPLACEMENT/ p }' foo.txt

私はSEDを理解し始めたばかりなので、完全に間違っている可能性がありますが、アドバイスは素晴らしいでしょう.

4

4 に答える 4

6

sed以下のように使用します。

$ cat file
line 1
line 2
#SO
I need to replace this text
#EO
line 3

$  sed -n '/#SO/{p;:a;N;/#EO/!ba;s/.*\n/REPLACEMENT\n/};p' file
line 1
line 2
#SO
REPLACEMENT
#EO
line 3

使い方:

/#SO/{                       # when "#SO" is found
  p                          # print
  :a                         # create a label "a"
    N                        # store the next line
  /#EO/!ba                   # goto "a" and keep looping and storing lines until "#EO" is found
  s/.*\n/REPLACEMENT\n/      # perform the replacement on the stored lines
}
p                            # print
于 2012-12-20T12:31:18.023 に答える
1

これはうまくいくはずです:

sed -n '/#SO/,/#EO/{s/.*/REPLACEMENT/;}' file

詳細については、このリンクを参照してください。

于 2014-06-18T06:34:10.933 に答える
0

パターンを使用して、sed が動作する行の範囲を指定できます。http://www.grymoire.com/Unix/Sed.html#uh-29
を参照してください。

sed -n '/#SO/,/#EO/ s/.*/changed/' file
于 2012-12-20T12:31:13.267 に答える
0

これは、あなたの望むことですか:

$ cat file
#SO
I need to replace this text
#EO

$ awk '/#EO/{f=0} {print f ? "replacement text" : $0} /#SO/{f=1}' file
#SO
replacement text
#EO

そうでない場合は、より代表的な入力を示してください。

于 2012-12-20T14:00:55.420 に答える