我正在尝试从文本文件中删除前N个字符,重要的是不是逐行删除。
目前,我编写的这段代码删除了每行中的“I”个字符。但我想从整个文本中删除。
for FILE in *;
do x=$(wc -c < "$FILE"); for ((i=1; i <= $x; ++i));
do sed "s/^.\{$i\}//" $FILE > $i;
done;
done;
例如,我在目录xml/root.xml中有这个XML文件
<ticket id="usa-001" REFUND="NO" TEST="TEST">
<airline>Us Airlines</airline>
<emptytag id="usa-001" REFUND="NO" TEST="TEST"/>
<preis>30</preis><seat>
<allseats>120</allseats>
</ticket>
我想要的是删除前N个字符并将其保存到一个新文件中。我们就说5个吧,就这么定了
et id="usa-001" REFUND="NO" TEST="TEST">
<airline>Us Airlines</airline>
<emptytag id="usa-001" REFUND="NO" TEST="TEST"/>
<preis>30</preis><seat>
<allseats>120</allseats>
</ticket>
8条答案
按热度按时间aydmsdu91#
如果您真的只想过滤掉文件的前n个字符,那么您需要的工具是
dd
,它允许您指定要跳过的块数。如果希望块大小为1,请使用bs
进行指定。例如,要跳过输入文件的前2个字符,请使用:您可以使用
if
指定输入文件,但重定向可能更简单。dd
向stderr写入一系列诊断信息,输出重定向只是为了抑制这些消息。这将是非常慢的,因为块大小非常小,但是(如果您有支持这一点的dd),您可以使用以下命令比sed
快得多:jjjwad0x2#
使用GNU sed:
如果要在少于5个字符的文件中删除最多5个字符,请使用
{1,5}
,而不是{5}
。t5fffqht3#
使用您显示的样例,请尝试以下
awk
代码。在GNUawk
中编写和测试。awk
的多个输入文件*:这里使用ENDFILE
函数,该函数将按照名称处理每个输入文件末尾的所有行。lawou6xi4#
您还可以使用
tail
:91zkwejq5#
使用
cut
看起来您想要将每一行都保存在一个文件中。
z9gpfhce6#
你知道,你也可以用
hexdump
:tzcvj98z7#
你可以*做一些像这样的粗俗和丑陋的事情-
请不要这样。改用Ed的
sed
。你可以用
Perl
-但是William的
dd
可以在二进制文件上运行,不需要任何代码...如果您的版本理解
+
选项,SunDeep的可能是最适合文本文件的-ygya80vv8#
如果你知道这是
ASCII
:假设它符合
UTF-8
文本,那么这应该可以清理最多5个任何类型的Unicode字符,包括换行符: