正则表达式匹配文本和换行符

时间:2020-05-04 08:32:37

标签: regex sed

我有一个文件,该文件将二进制文件附加到bash脚本(在本例中为ISO)。它最终被拆开,执行bash脚本以安装ISO。 bash脚本以唯一的字符串结尾; “ 数据”,脚本在执行期间会删除该行上方(包括该行)的所有内容。

但是,它不会删除终止的新行,这意味着新文件(应该只是二进制ISO数据)以换行符开头,从而破坏了ISO。

删除数据的正则表达式如下

sed -re '1,/^__DATA__$/d'

使用cat -e查看文件我正在尝试匹配并删除$之后的__DATA__$

#cat -et file.bin

echo "I: Installation finished!"$
exit 0$
$
__DATA__$
$
3<ED>M-^PM-^PM-^PM-^PM-^

1 个答案:

答案 0 :(得分:1)

我建议使用

sed -n '/__DATA__/{n;:1;n;p;b1}' file

在这里,-n禁止显示行的默认输出,然后找到包含__DATA__的第一行,然后将一行读入模式空间,然后读取并打印所有后续行。因此,我们跳过文件__DATA__前一行和下一行的一部分。

请参见online sed demo

s='#cat -et file.bin

echo "I: Installation finished!"
exit 0

__DATA__

3<ED>M-^PM-^PM-^PM-^PM-^'

sed -n '/__DATA__/{n;:1;n;p;b1}' <<< "$s"

输出:

3<ED>M-^PM-^PM-^PM-^PM-^
相关问题