sed を使用してテキストファイルに新しい行文字を追加する [duplicate]

sed を使用してテキストファイルに新しい行文字を追加する [duplicate]

/etc/securetty次のコマンドを使用して、ファイルに次の内容を追加したいと思いますsed

pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
pts/9

これを行うには、次のコマンドを作成しました。

sed -i '$a pts/0\\npts/1\\npts/2\\npts/3\\npts/4\\npts/5\\npts/6\\npts/7\\npts/8\\npts/9' /etc/securetty

結果は次のとおりです。

pts/0\npts/1\npts/2\npts/3\npts/4\npts/5\npts/6\npts/7\npts/8\npts/9

私は明らかにここに何かを逃しています。私のコマンドにどのような問題がある可能性がありますかsed

答え1

シンプルシェル方法:

for i in {0..9}; do echo "pts/"$i; done >> /etc/securetty

>>- ファイルに出力を追加

>- ファイルに直接出力(上書き)

答え2

ところで、次に追加したい場合終わりこのような既存のファイルを使用すると、sedやシェルループは必要ありません。これは単なるコマンドです:

$ printf '%s\n' "pts/"{0..10} >> /etc/securetty

挿入したい場合スタートそれでもprintfを使用してファイル操作を完了できます。

$ cat file1
europe|EU
australia|AU
china|CN
$ printf '%s\n%s\n' "pts/"{0..10} "$(<file1)"
pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
pts/9
pts/10
europe|EU
australia|AU
china|CN

/etc/securetty次のようにファイルの内容を置き換えることができます(sed -i背後で同じことを行っても)。

$ printf '%s\n%s\n' "pts/"{0..10} "$(</etc/securetty)" > tmpsecure && mv -f tmpsecure /etc/securetty

選択する:

$ { printf '%s\n' "pts/"{0..10}; cat /etc/securetty; } > tmpsecure && mv -f tmpsecure /etc/securetty
# Or
# cat <(printf '%s\n' "pts/"{0..10}) /etc/securetty > tmpsecure && mv tmpsecure /etc/securetty

答え3

それが必要です:

sed -i 'a pts/0\npts/1\npts/2\npts/3\npts/4\npts/5\npts/6\npts/7\npts/8\npts/9' /etc/securetty

または、コンテンツをファイルに配置し、read (r)sedオプションを使用してターゲットファイルに追加することもできます。

例:

$ cat input.txt
pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
pts/9

$ cat /etc/securetty
This is a dummy file

注文する:

sed -i 'r input.txt' /etc/securetty

ファイルは/etc/securetty次のように変更されます。

$ cat /etc/securetty
This is a dummy file
pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
pts/9

関連情報