たとえば、次のコードは次のことができます。
[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
。
答え2
ラインを南に移動するのか、それともそのままにするのかによって、別々の容器に保管してください。その後、すべての行がこのように表示されたら、希望の順序で印刷します。
$ perl -ne 'push @{/_00[2468]$/ ? \@A : \@B}, $_}{print @B, @A' input.txt
posix sedを使用してこれを行うこともできます。
$ sed -ne '
/_00[2468]$/s//&/w data2468
//!p
$r data2468
' input.txt