私の入力は特別なエスケープ文字を含むパイプから来ます。説明のために、フローは次のとおりです。
printf "foo.bar\033[00m" > file
cat file
末尾を削除する方法は.bar\033[00m
?以下を試しましたが、動作しません。
cat file | sed 's/\.bar\033[00m//'
ベストアンサー1
ファイルに次の制御文字が含まれている場合
printf "foo.bar\033[00m" > file
次に、特定の単一発生を削除するには、.bar\033[00m
次のようにします。
sed $'s/\.bar\033\[00m//'
ファイル全体からすべてのエスケープシーケンスを削除するには、次の手順を実行します。
sed $'s/\033\[[0-9;]*m//g'
一重引用符で囲まれた文字列の前のドル()は、$'some text'
シェルに文字列の内容にANSI C引用符を適用するように指示しますprintf
。これは、「エスケープされた」ASCII文字(0x1B
/ / ...)を生成する033
ために必要です。
キャラクターはキーボードショートカットで生成することもできます($'
必須ではありません):
sed 's/\.bar
Ctrl-vESC\[00m//'
打撃後に画面に表示するCtrl-vESC必要がありますが、テキストと(2文字)の代わりに制御文字があります。^[
^
[
元の答え
必要に応じてfoo
出力
printf '%s' 'foo.bar\033[00m' | sed 's/\.bar\\033\[00m//'
\
とはすべて[
相手によってエスケープされなければなりません\
。また、入力文字をエスケープコードとANSIカラーとして解釈できるリテラル文字列として印刷'%s'
するために追加しました。printf
\033[