^L
Unixファイルから文字とそれに続く空白行を削除する方法は?次のことを試しましたが、VTとスペースを削除できますが、^ L文字とその後の空白行は削除できません。
tr -s '\040\011\' '|' <$x>> modified.txt
そして:
tr -d '\013' <modified1.txt>> $FILENAME
答え1
これは脱字コード~のためフォーム供給。 GNU実装では、sed
8進値を使用してそれらを削除できます\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
テキスト形式の分割を示します。