sedを使用してエスケープ文字を削除する

sedを使用してエスケープ文字を削除する

私の入力は特別なエスケープ文字を含むパイプから来ます。説明のために、フローは次のとおりです。

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/\.barCtrl-vESC\[00m//'

打撃後に画面に表示するCtrl-vESC必要がありますが、テキストと(2文字)の代わりに制御文字があります。^[^[


元の答え

必要に応じてfoo出力

printf '%s' 'foo.bar\033[00m' | sed 's/\.bar\\033\[00m//'

\とはすべて[相手によってエスケープされなければなりません\。また、入力文字をエスケープコードとANSIカラーとして解釈できるリテラル文字列として印刷'%s'するために追加しました。printf\033[

おすすめ記事