从文件中删除前导字节,然后将其余字节写入otput

时间:2019-11-06 15:00:37

标签: linux awk sed grep cut

我需要在(文本)文件中找到第一个子字符串,删除/剪切前导字节,将其余字节写入新文件。我尝试了SED,AWK,CUT,但由于效果不佳而迷失了方向。听起来很简单。这应该在.sh cmdline脚本中起作用。

输入文件可能包含换行符,或者所有内容都位于一行中,因此要找到<?xml标记应该工作在字符或字节级别。前导字节是随机的,任何长度。

输入文件: something I want to drop<?xml............to the end of file</root>

输出文件:<?xml............to the end of file</root>

2 个答案:

答案 0 :(得分:1)

使用perl

perl -0777 -pe 's/.*?(?=<\?xml)//s' ip.txt

-0777将导致整个文件被读取为单个字符串。 s标志将允许.匹配换行符。 (?=<\?xml)将提前匹配<\xml,从而删除该字符串之前出现的所有字符。

要将更改保存到位,请使用perl -0777 -i -pe

答案 1 :(得分:1)

sed -n '/.*<?xml/,${s//<?xml/;p}' file

从xml行到结束行($),剥离开头,然后打印。

  • -n不会打印,除非p告诉它打印图案缓冲区。
  • 替换中的空//将匹配先前的匹配字符串,在这种情况下为/.*<?xml/