我需要在(文本)文件中找到第一个子字符串,删除/剪切前导字节,将其余字节写入新文件。我尝试了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>
答案 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/