標準入力(2つのファイルを一緒にcat
ing)で作業しており、結果の最後の10文字を除くすべてを次のコマンドに渡す必要があります。
検索で見つけることができるのは、sed
、awk
またはtr
を使用して各行から最後のn文字を削除するか、head
、tail
またはrev
は、n行を削除します。
コマンドにパイプされた標準出力からこれを行うために何を使用できますか(うまくいけば、単純に単一のコマンドで)?
例:
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ツールを使用する必要があります:(
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'
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()