我试图从文本文件中删除前 N 个字符,重要的是它不是逐行完成的。
目前,我编写的这段代码从每行中删除了“i”个字符。但我想从全文中删除。
for FILE in *;
do x=$(wc -c < "$FILE"); for ((i=1; i <= $x; ++i));
do sed "s/^.\{$i\}//" $FILE > $i;
done;
done;
Run Code Online (Sandbox Code Playgroud)
例如我在目录 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>
Run Code Online (Sandbox Code Playgroud)
我想要的是删除前 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>
Run Code Online (Sandbox Code Playgroud)
如果您确实只想过滤掉文件的前 n 个字符,那么您需要的工具是dd允许您指定要跳过的块数。如果您希望块大小为 1,请使用 指定bs。例如,要跳过输入文件的前 2 个字符,请使用:
$ echo foobarbaz | dd bs=1 skip=2 2> /dev/null
obarbaz
Run Code Online (Sandbox Code Playgroud)
您可以使用 指定输入文件if,但重定向可能更简单。 dd将一堆诊断信息写入 stderr,输出重定向只是为了抑制这些消息。由于块大小太小,这将非常慢,但是(如果您有支持此功能的 dd )您可以比以下方式快得多sed:
dd iflag=skip_bytes skip=5
Run Code Online (Sandbox Code Playgroud)