【发布时间】:2022-09-27 17:56:08
【问题描述】:
我正在尝试从文本文件中删除前 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>
-
如果您要删除 100 个字符但第一行只有 35 个字符,应该怎么办?您会继续删除字符直到删除 100 个字符吗?您是否将行尾的换行符 (
\\n)(以及可能的回车 -\\r)算作 100 个字符的一部分? -
要跳过
$n字符,请使用dd bs=1 skip=\"$n\" -
您添加了一个示例很好,但是既然您说
whats Important is that it is done NOT LINE BY LINE您的示例对于测试潜在解决方案会更好,如果要删除的文本不是全部在 1 行上。对于给定的示例,执行和不执行您想要的操作的脚本将产生相同的输出,因此我们无法通过使用您的示例进行测试来判断它们是否真的有效。下次有什么要考虑的。 -
顺便说一句,您的脚本看起来您可能想要创建单独的文件以连接所有输入文件中的各种字符串 - 如果是这样,在第二个嵌套循环中调用 sed 的 shell 循环将比调用 awk 一次非常慢。如果您需要有关更大问题的帮助,请发布一个新问题。