次のテキストファイルがあるとします。
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"
(もちろん-i
for 位置は維持)
答え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の返信。