この「printf」コードを修正して操作を元に戻すにはどうすればよいですか?

この「printf」コードを修正して操作を元に戻すにはどうすればよいですか?

たとえば、次のコードは次のことができます。

[anony@mous-pc ~]$ (printf 'g?%s?m0\n' 008 006 004 002 ; printf 'wq\n') | ed -s file.txt

...内のすべての数字を選択してください...

[anony@mous-pc ~]$ cat some.txt
005
003
110
069
002
008
004
245
009
007
006

...次のように、実行コードで指定された正確な順序で目的の数字(または他の文字列)を一番上に移動します。

[anony@mous-pc ~]$ cat some.txt
002
004
006
008
005
003
110
069
245
009
007

数値が.txtの上部ではなく下部に揃うようにこのコードをどのように変更できますか?

ベストアンサー1

0スクリプトedをに変更します$$編集バッファの最後の行を指定します。

$ { printf 'g?%s?m$\n' 008 006 004 002; echo 'wq'; } | ed -s file.txt
$ cat file.txt
005
003
110
069
245
009
007
008
006
004
002

逆順(質問の順序)として適用するには、パターンリストを逆順に置き換える必要があります。

$ { printf 'g?%s?m$\n' 002 004 006 008; echo 'wq'; } | ed -s file.txt
$ cat file.txt
005
003
110
069
245
009
007
002
004
006
008

またはその問題に関しては

{ printf 'g?%s?m$\n' 008 006 004 002 | tac; echo 'wq'; } | ed -s file.txt

tac... GNU coreutilsがインストールされている場合。一部のシステム(BSD)tail -rではtac

おすすめ記事