単一のコマンドを使用してファイルから削除された行を新しいファイルとして印刷するには?

単一のコマンドを使用してファイルから削除された行を新しいファイルとして印刷するには?

例:
ファイルAに20行が含まれていますが、最初の10行を削除しました。sed -i 1,10d A.txt

削除された10行をファイルBに印刷するには、どのコマンドを作成する必要がありますか?

私はsed -i 1,10d A.txt >> B.txt何がうまくいかなかったかを試しました。

答え1

使用sedsedスクリプト

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

catGNUがあれば、stdoutcatがstdinと同じファイルを参照すると文句を言うでしょう。cat|cat別の ofcatまたはksh93組み込み関数を使用してcat(たとえば、command /opt/ast/bin/catnot ofcatまたは put /opt/ast/binbefore を使用して)、この問題を解決できます$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行が削除されます。

関連情報