sed コマンドを使用して、最初のパターン発生を見つけて追加します。

sed コマンドを使用して、最初のパターン発生を見つけて追加します。

次のテキストファイルがあるとします。

Hello world
types=""
Mario
types="Game"

私が望むのは、単語が最初に表示されるものを見つけてそのtype=""単語を追加することです。program

私が望む出力:

Hello world
types="program"
Mario
types="Game"

Unixシェルスクリプトで使用する必要があります。

私が試したこと:

sed -i  '1,/types=\"\"/s/types=\"\"/types=\"program\"/' filename

このコマンドは挿入のみを行い、追加しません。追加しようとしましたが、a\まだ機能しません。

答え1

{   sed '/types=""/!b
        s/"/&program/;q'
    cat
}   <infile >outfile

POSIXはsed入力ファイルのオフセットを入力位置に正確に保ちますq。ただし、GNUの場合はsedこのオプションが必要な場合があります-u

答え2

挿入を使用してiからd行を削除してq終了できます。

~$ sed '/types=""/{i\
> types="program"
> d;q}' f
Hello world
types="program"
Mario
types="Game"

これはうまくいきません(@mikeservに感謝します)。または単にc行を変更してq終了します。

~$ sed '/types=""/{c\
> types="program"
> q}' f
Hello world
types="program"
Mario
types="Game"

(もちろん-ifor 位置は維持)

答え3

POSIX的に:

$ sed -e '1,/types=""/{
  //s/"/&program/
}
' file

奇妙なことに、上記の内容はGNU sedで失敗します。以下が必要です。

$ sed -e '1,/types=""/{
  /types=""/s/"/&program/
}
' file

types=""最初の行に表示されると、上記の内容はすべて失敗します。この場合、GNU sedまたはBSD sedを使用できます0,/pattern/

$ sed -e '0,/types=""/{                
  /types=""/s/"/&program/
}
' file

またはPOSIXのいずれか:

$ sed -e '/types=""/{
  s/"/&program/
  :1
  n
  b1
}
' file

または視聴@mikeservの返信

関連情報