^L(\f/FF/form-feed/page-break) 文字を削除

^L(\f/FF/form-feed/page-break) 文字を削除

^LUnixファイルから文字とそれに続く空白行を削除する方法は?次のことを試しましたが、VTとスペースを削除できますが、^ L文字とその後の空白行は削除できません。

tr -s '\040\011\' '|' <$x>> modified.txt

そして:

tr -d '\013'  <modified1.txt>> $FILENAME

答え1

これは脱字コード~のためフォーム供給。 GNU実装では、sed8進値を使用してそれらを削除できます\o14

sed 's/\o14//g' file 

エスケープコードを使用することもできます。

sed 's/\f//g' file

CtrlVこれらの文字は、その文字のコードをタップして端末に入力できます。この場合はCtrlL。したがって、次のように入力します。

sed 's/

次にCtrlV[次へ]をクリックしますCtrlL

sed 's/^L

これで、次のコマンドを完了します。

sed 's/^L//g' file

上記で直接書き込んだり貼り付けたりするのではなく、^L私が提供するキーボードショートカットを使用してください。

以下を使用して削除することもできますtr

tr -d '\f' < file

またはperl:

perl -pe 's/\f//g' file

その項目とその後の空白行を削除するには、\f次の手順を実行します。

perl -0pe 's/\f\s*/\n/s' file

答え2

ksh93、bash、zsh、mksh、最新のFreeBSD shを使用してください。

sed $'/\f/,/./{/\f/d;/./!d;}'

連続したシーケンスがあると\f\n\n...失敗します。

GNUではsed省略できます$

POSIXly($'...'まだPOSIXではありませんがSUSv5に表示される可能性があります):

FF=$(printf '\f')
sed "/$FF/,/./{/$FF/d;/./!d;}"

;現在のPOSIX仕様にはbeforeの代わりに改行文字が必要}ですが、実際にはPOSIX仕様のエラー初期実装でもsed必要ないからです。

答え3

sed "$(printf '$!N;/\f')"'\n/,/\n./!P;D' <in >out

...POSIX互換シェルがある限り動作する必要printfがありますsed

printf文字通り文字を挿入する場合は、実際には必要はありません。一般的にできますCTRL+VそれからCTRL+L

だから...

sed '$!N;/^L\n/,/\n./!P;D' <in >out

...中^L上記の手順は、次のようにして達成されます。CTRL+VそれからCTRL+Lテキスト形式の分割を示します。

関連情報