特定のテキストを含む行を、実行されたコードと同じ順序でファイルの先頭に移動するにはどうすればよいですか?
これが私が持っているコードです:
printf 'g?_001\|_002\|_003\|_004\|_005?m0\nwq\n' | ed -s target_file
(クレジットはsteeldriverに行きます。私がここまで到達するのを手伝ってくれました。本当にこのサイトの素晴らしいユーザーです!)
これにより、次のように上部に移動します。
name_003
name_005
name_004
name_002
name_001
または、元の順序で、一番上に配置します。
ただし、printf
およびedcode
内にあるのと同じ順序で配置する必要があるため、この場合は次のようになります。
name_001
name_002
name_003
name_004
name_005
printf
とed
に精通している人はいますか?
個別の移動コマンドを使用します。
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
ではなく、ed
(実際にはVim)を使用しています。 -c
オプションを使用してコマンドラインでexコマンドを指定できるため、printf
は必要ありません。005
が最初に一番上に移動し、次に004
、次に005
、次に003
、両方の004
を押し下げます。および005
、...)printf
とed
の場合、多分:
(printf 'g?%s?m0\n' {005..001}; printf 'wq\n') |
ed -s target_file