如何删除^L
unix 文件中的字符及其后面的空行?我已尝试以下操作,并且能够删除 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、printf
和sed
.
printf
如果您只是按字面插入字符,则实际上并不需要。你通常可以这样做CTRL+V
然后CTRL+L
。
所以...
sed '$!N;/^L\n/,/\n./!P;D' <in >out
...其中^L
上面的序列是通过做得到的CTRL+V
然后CTRL+L
并代表文字换页符。