/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 もシェル ループも必要ありません。コマンドは 1 つだけです。
$ 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