コードが実行される順序で特定のテキストを含む行をファイルの先頭に移動するにはどうすればよいですか?
これは私のコードです。
printf 'g?_001\|_002\|_003\|_004\|_005?m0\nwq\n' | ed -s target_file
(クレジットは次のとおりです。スチールドライバーこの時点まで行くのを手伝ってください。このサイトの本当に素晴らしいユーザーです! )
これにより、次のように一番上に移動します。
name_003
name_005
name_004
name_002
name_001
または、元の順序に関係なく、一番上に移動してください。
printf
ただし、inとedと同じ順序で配置する必要があるため、code
この場合は次のようになります。
name_001
name_002
name_003
name_004
name_005
誰もとについてよく知ってprintf
いますかed
?
答え1
別の移動コマンドを使用します。
ex -sc 'g?_005?m0' -c 'g?_004?m0' -c 'g?_003?m0' -c 'g?_002?m0' -c 'g?_001?m0' -c wq target_file
気づく:
- 代わりに、私は
ex
ここ(実際にはVim)を使っていますed
。 optionsを使用してコマンドラインでexコマンドを指定することができるので、-c
それはprintf
必要ありません。 - パターンは逆順でなければなりません(
005
最初に上に移動し、次に下に004
スライドし005
、次に、下に003
押して、...)。004
005
printf
とを使用すると、ed
おそらく次のようになります。
(printf 'g?%s?m0\n' {005..001}; printf 'wq\n') |
ed -s target_file