如何阻止 sed 添加额外的换行符

jon*_*ski 18 sed

我正在运行以下 2 个sed命令。第一个在我想要的地方添加换行符,第二个也在我想要的地方添加换行符,但还在文件末尾添加了一个额外的,以前没有的。

sed -e 's|\<LIST_G_STATEMENT>|&\
|g' ${XMLDIR}/statement_tmp_1.xml > ${XMLDIR}/statement_tmp_2.xml

sed -e 's|\</LIST_G_STATEMENT>|&\
|g' ${XMLDIR}/statement_tmp_2.xml > ${XMLDIR}/statement_tmp_3.xml
Run Code Online (Sandbox Code Playgroud)

使用od -c上的所有文件3给出了下面的输出。

statement_tmp_1.xml(\n文件末尾没有)

1314700    T   A   T   E   M   E   N   T   >   <   /   L   I   S   T   _
1314720    G   _   S   T   A   T   E   M   E   N   T   >   <   /   G   _
1314740    S   E   T   U   P   >   <   /   L   I   S   T   _   G   _   S
1314760    E   T   U   P   >   <   /   A   R   X   S   G   P   O   >
1314777
Run Code Online (Sandbox Code Playgroud)

statement_tmp_2.xml(\n文件末尾没有)

1314700    S   T   A   T   E   M   E   N   T   >   <   /   L   I   S   T
1314720    _   G   _   S   T   A   T   E   M   E   N   T   >   <   /   G
1314740    _   S   E   T   U   P   >   <   /   L   I   S   T   _   G   _
1314760    S   E   T   U   P   >   <   /   A   R   X   S   G   P   O   >
1315000
Run Code Online (Sandbox Code Playgroud)

statement_tmp_3.xml(\n在文件末尾 - 它来自哪里?)

1314700    S   T   A   T   E   M   E   N   T   >   <   /   L   I   S   T
1314720    _   G   _   S   T   A   T   E   M   E   N   T   >  \n   <   /
1314740    G   _   S   E   T   U   P   >   <   /   L   I   S   T   _   G
1314760    _   S   E   T   U   P   >   <   /   A   R   X   S   G   P   O
1315000    >  \n
1315002
Run Code Online (Sandbox Code Playgroud)

我正在运行 AIX 5.3

基本上,我要么希望它停止添加 extra \n,要么找到一种删除它的方法。

Sté*_*las 13

您应该认为自己很幸运,因为 AIXsed添加了缺少的换行符。

不以换行符结尾的非空文件不是文本文件(至少根据文本文件的 POSIX 定义),因为文本文件旨在包含行,而行是(不太- long) 由换行符终止的字符序列,因此像sed它这样的文本实用程序的行为是未指定的,并且在实践中因实现而异。

某些sed实现会在最后一行之后忽略那些虚假字符。

AFAIK,xml文件应该是文本文件,所以这意味着sed只需为您修复它。

如果您确实需要该文件不以换行符结尾,那么您可以使用perl或 其他可以处理非文本数据的工具。

perl -pe 's|<LIST_G_STATEMENT>|$&\n|g'
Run Code Online (Sandbox Code Playgroud)