単語(文字ではない)に置き換えるには、「sed」を使用してください。

単語(文字ではない)に置き換えるには、「sed」を使用してください。

sed構文を使用して文字を除外する方法を知っていますが、[^xxxx]単語を除外する方法は何ですか?たとえば、私の変数は次のようになります。

var="
Now is the time
for all good men 
to come 
to the aid  
of the party" 

今:

echo $var | sed ...

...私が言いたいことは次のとおりです。

REPLACED time
for all good men 
to come 
REPLACED aid  
REPLACED party 

...簡単にする必要がありますが、どうすればいいかわかりません。

echo $var | sed -r 's/^[^the]*the/REPLACED/'

...多少似ていますが、t h e単語ではなく単一の文字に一致しますthe

何度も発生する最初のイベントまで、または特定のイベントが発生するまですべてを交換できるソリューションがある場合は、より良いでしょう。

ベストアンサー1

次のようにこれを達成できます。theAssume 行に最大 1 つのインスタンスがあるとします。:

 sed -E 's/.*\Wthe(\W.*)/REPLACED\1/'

the最後の項目までのすべての内容が代替テキストで置き換えられます(正規表現は貪欲であることを覚えておいてください)。

  • 、で終わる単語以外の文字を含む単語以外の文字で囲まれtheた(たとえば、部分単語の一致を防ぐために)、キャプチャグループで最後に発生した以降のすべての項目を保存します。theoreticalthe( ... )
  • \1その後、行を代替テキストに置き換え、その後にキャプチャグループ(検索パターンの最初のグループであるため、いわゆる呼び出されます)の内容が続きます。終了文字theも代替テキストとして送信するには、少し複雑なアプローチが必要です。

全部交換したいなら最初これが発生した場合は、次の方法を使用する必要がありますawk

awk '(i=match($0,/\Wthe\W/)){print "REPLACED" substr($0,i+4);next} 1'

これは、単語ではなく文字で囲まれた文字列がそのthe行にあることを確認し、場所を変数に保存しますi

  • 0 以外の場合は、i現在の入力行から始まる代替テキストとサブストリングを印刷します。後ろにが表示されますが、theそうでない場合は、次の行に実行をスキップします。
  • 0の場合は、i現在行をそのまま印刷します。

おすすめ記事