例:
ファイルAに20行が含まれていますが、最初の10行を削除しました。sed -i 1,10d A.txt
削除された10行をファイルBに印刷するには、どのコマンドを作成する必要がありますか?
私はsed -i 1,10d A.txt >> B.txt
何がうまくいかなかったかを試しました。
答え1
使用sed
とsed
スクリプト
1,10{
w otherfile
d
}
これにより、行1〜10がファイルに書き込まれ、otherfile
入力から削除されます。
ソースファイルの内部編集(sed
ここではGNUを使用):
sed -i '1,10{w B.txt
d}' A.txt
ファイル名を区別するには改行文字が必要です。または、
sed -i -e '1,10{w B.txt' -e 'd}' A.txt
答え2
そしてksh93
:
{ head >> B.txt; cat 1<>; A.txt; } < A.txt
cat
GNUがあれば、stdoutcat
がstdinと同じファイルを参照すると文句を言うでしょう。cat|cat
別の ofcat
またはksh93
組み込み関数を使用してcat
(たとえば、command /opt/ast/bin/cat
not ofcat
または put /opt/ast/bin
before を使用して)、この問題を解決できます$PATH
。
リダイレクト1<>;
演算子は標準1<>
演算子のように動作します(読み取り+書き込みモードで開きます)。切り捨てなし) ただし、ファイルも切り捨てられます。結局リダイレクトコマンドが成功した場合。
答え3
お客様の要件が次のとおりです。
- ファイルAの最初の10行をファイルBに書き込みます。
- ファイルAの最初の10行を削除
sed -i 1,10d A.txt
次の方法でこれを実行できます。
head -10 A.txt > B.txt
sed -i 1,10d A.txt
最初のコマンドは、A.txtファイルの最初の10行をB.txtに書き込みます。
2番目のコマンドは(あなたの提案に従って)A.txtファイルの最初の10行を削除します。
最初の10行を取得するには、次の手順を実行する必要があります。この行を削除する前に
答え4
sedとパイプを使用してこれを達成できます。
sed -n '1,10p' a.txt > b.txt | sed -i '1,10d' a.txt
最初の10行a.txt
がコピーされb.txt
、最初の10a.txt
行が削除されます。