次の形式の入力ファイルがあります。
something here
somethingElseHere^[%-somestuff here
^[%-somestuff here
この文字は^[
エスケープ文字です\x1b
。
だから私がしたいことは、^[
bashスクリプトで最初に発生した後にファイルのすべての内容を削除することです。したがって、次のような結果が出ます。
something here
somethingElseHere
私の解決策は次のとおりです。awk -F "\x1b" {'print $1'}
ただし、これは次のような出力を提供します。
something here
somethingElseHere
(empty line here)
したがって、最後の行の後に空の行を追加します。ただし、手動で削除すると追加のバイトが得られます。ファイルを最大\x1b
文字まで読み込み、読み取ったすべての文字を別々のファイルに書き込むC ++プログラムを作成しましたが、AWKを使用すると、追加の行を削除してもC ++を使用した場合よりも1バイト多くの結果が得られます。
編集する:
AWKを使用するときに追加されたEOL文字ですか? C ++プログラムで作業するときはそれを追加しません。
修正する:
私はちょうどいくつかのコマンドを試しましたが、それを開くとほとんど動作しますvi
が、まだ余分なバイトがあり、それがどこから来たのかわかりません。
$hexdump -x file1
0000000 4329 706f 7279 6769 7468 6328 2029 3931
0000010 3939 4d20 6369 6f72 6f73 7466 4320 726f
0000020 6f70 6172 6974 6e6f 610a 6362 6564 6766
0000030 6968 6b6a 6d6c 6f6e 7170 7372 7574 7776
0000040 7978 534d 5020 4c43 4c58 6f46 746e 3020
0000050 3130 a8f8 4955 0a42
0000058
$hexdump -x file2
0000000 4329 706f 7279 6769 7468 6328 2029 3931
0000010 3939 4d20 6369 6f72 6f73 7466 4320 726f
0000020 6f70 6172 6974 6e6f 610a 6362 6564 6766
0000030 6968 6b6a 6d6c 6f6e 7170 7372 7574 7776
0000040 7978 534d 5020 4c43 4c58 6f46 746e 3020
0000050 3130 a8f8 4955 0042
0000057
bashで作成したfile1には追加0x0a
(改行)が追加されました。
答え1
これがGNUソリューションですsed
:
sed -z 's/\x1b.*//'
awk
OPの意見に基づいた解決策は次のとおりです。
awk -F '\x1b' 'NF > 1 { printf "%s", $1; exit } 1'
改行で終わらないようにするには妥当な理由が必要ですが、プレーンテキストファイルは改行で終わらなければならないことを覚えておいてください。