UnixファイルからCtrl Fを削除する方法

UnixファイルからCtrl Fを削除する方法

Unixファイルを編集するときは、viエディタから次のデータを取得します。

MGW:^FVMG107
MGW:^FVMG113
MGW:^FVMG108
MGW:^FVMG103

上記のデータは^Fコマンドでは表示できません。私もcatそうしてみましたが、まだそのままですね。どのように削除しますか?dos2unixsed^F

答え1

^Fvimはそこに印刷できない文字0x06があると言いますか(Fはアルファベットの6番目の文字であり、その範囲は '^@', '^A', '^B'... '^Y', '^ ') ^[', '^\', '^]', '^^', '^_')

vim、nano、joeからグラフィカルに削除するのに問題はありません。ただし、コマンドライン方法を好む場合は、文字0x06であることを知ってsed -i 's/\x06//g' filenameそれを使用して削除できます。

PS:cat -v^ Fを削除するPolymソリューションは、ファイルに印刷できない他の文字(壊れる可能性がある)がない場合にのみ機能します。

答え2

Ángelが言ったように、^Fこのinviまたはの出力はcat -v06文字を表します。これらの文字を削除する別の方法は次のとおりです。

tr -d "\06" < oldfile > newfile

答え3

編集:同様天使上記のように、このソリューションを使用すると不要な変更が発生する可能性があるため、使用しないでください。

彼の解決策(hex(^F)== \x06):

sed -i 's/\x06//g' filename

私の(間違った)解決策:

cat -v oldfile | sed 's/\^F//g' > newfile

それは行わなければなりません。

答え4

vimでファイルを操作しているので、vi / vimでもこの問題を修正できます。 ctrl-vを押してからctrl-を押すと、これらの文字を入力できます。これを行うには、crtl-vを押してからctrl-fを押します。

したがって、簡単な検索/置換を使用できます。

:%s/^F//

これはすべての行(%)に適用され、(s)の最初のインスタンスである^ Fを何も置き換えずに置き換えて効果的に削除します。

catの代わりにファイルに隠された文字を表示するには、od -cを試してください。

od -c <file name>

たとえば、ファイルに^Fと2行の終わりを入力します。

alex@Smiley:/tmp|⇒  cat test


alex@Smiley:/tmp|⇒  od -c test
0000000  006  \n  \n
0000003

タブ、行末などを含むエスケープされたすべての文字を印刷します。

sedを使用するには、コマンドラインで同じctrl-V、crtl-trickを使用することもできます。これにより翻訳を覚える必要はありません。

関連情報