Bashで最後のn文字を除くすべての文字を印刷するには?

Bashで最後のn文字を除くすべての文字を印刷するには?

私は標準入力(cat2つのファイルを一緒に使用)を使用しており、結果の最後の10文字を除くすべての文字が次のコマンドで渡されることを望んでいます。

検索で見つけることができるのはsed、 を使用して各行の最後の n 文字を削除する、awkまたは を使用して n 行を削除することです。trheadtailrev

これを行うために標準出力からコマンドにパイプするには何を使用できますか(簡単で単一のコマンドを使用して)?

例:

Input:
SELECT 'A', 1, GETDATE() UNION ALL
SELECT 'B', 2, GETDATE() UNION ALL
...
SELECT 'Z', 2, GETDATE() UNION ALL

Output:
SELECT 'A', 1, GETDATE() UNION ALL
SELECT 'B', 2, GETDATE() UNION ALL
...
SELECT 'Z', 2, GETDATE()

とにかく私はWindowsでCygWinを使用しているので、かなり標準的で古いUnixツールと一緒に使用する必要があります:(

ベストアンサー1

あなたが使用できるhead

command | head -c-10

command最後の10バイトが出力から削除されます。

引用元man head:

   -c, --bytes=[-]K
          print the first K bytes of each  file;  with  the  leading  `-',
          print all but the last K bytes of each file

削除したい10文字が1行に表示されると具体的に言及したので、sedそれも使用してください。コマンド出力を次にパイプします。

sed '$s/\(.\{10\}\)$//'

またはsed拡張正規表現をサポートする場合:

sed -r '$s/.{10}$//'

構文は次のようになりますperl

perl -pe 's/.{10}$// if eof'

おすすめ記事