删除 ^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 实现sed,您可以使用其八进制值 删除它\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...s 序列,那么这将会失败。

使用 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 标准的 shell、printfsed.

printf如果您只是按字面插入字符,则实际上并不需要。你通常可以这样做CTRL+V然后CTRL+L

所以...

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

...其中^L上面的序列是通过做得到的CTRL+V然后CTRL+L并代表文字换页符。

相关内容