私は標準入力(cat
2つのファイルを一緒に使用)を使用しており、結果の最後の10文字を除くすべての文字が次のコマンドで渡されることを望んでいます。
検索で見つけることができるのはsed
、 を使用して各行の最後の n 文字を削除する、awk
または を使用して n 行を削除することです。tr
head
tail
rev
これを行うために標準出力からコマンドにパイプするには何を使用できますか(簡単で単一のコマンドを使用して)?
例:
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'
答え2
以下を使用する必要がありますperl
。
$ perl -lpe '$_=substr($_,0,-10) if eof' file
SELECT 'A', 1, GETDATE() UNION ALL
SELECT 'B', 2, GETDATE() UNION ALL
...
SELECT 'Z', 2, GETDATE()