0

ファイル内の特定の文字列を検索し、特定の文字列に到達するまでファイル内のすべての行を削除する必要があります。基本的に、2 つの特定の文字列の間のすべての行を削除する必要があります。
例えば

 <start /myhome >
 some entries
 some entries
 <end>
 <start ~ "/myhome[^/]+" >
 some entries
 some entries
 <end>
 <start /newhome >
 some entries
 some entries
 another entry
 different string
 <end>
 <start ~ "/myhome[^/]+" >
 some entries
 some entries
 <end>

予想される出力は次のとおりです。

<start /myhome >
 some entries
 some entries
 <end>
 <start /newhome >
 some entries
 some entries
 another entry
 different string
 <end> 
4

1 に答える 1

3
perl -ne 'print if !(/<start.*?myhome\[.*?>/ .. /<end>/);' < file.txt

編集:ビルトインのみを使用したい場合は...

#!/bin/sh                                                                       

hide_from_to() {
  start=$1
  end=$2
  unset hide

  while read line
  do
    if test "$line" = "$start"
    then
      hide=1
    fi
    if test -z "$hide"
    then
      echo $line
    fi
    if test "$line" = "$end"
    then
      unset hide
    fi
  done
}

hide_from_to '<start ~ "/myhome[^/]+" >' '<end>' < a.txt
于 2013-11-21T00:51:54.653 に答える