我在Linux中使用“sed”执行查找-替换操作。我在Linux中有一个名为config.xml的XML文件。该文件包含以下数据-
<CATALOG>
<SERVER>
<URL value="http://ip-172-44-0-92.compute.internal:440/" />
</SERVER>
</CATALOG>
我想在config.xml文件中查找包含<URL value=
的行,并将整行替换为<URL value="http://ip-181-40-10-72.compute.internal:440/" />
我试着执行命令-
sed -i '/<URL value=/c\<URL value=\"http://ip-181-40-10-72.compute.internal:440/\" />' config.xml
该命令执行正确,并找到替换操作,但当我打开文件使用vi config.xml
我看到^M
字符在每一行的末尾没有被替换。为什么会发生这种情况,如何修复它?
编辑-
参考@Atalajaka的答案...我的原始文件在每一行的末尾都包含CRLF行尾。并且,sed用LF行尾替换该行。因此,所有其他未替换的行仍然会有CRLF行尾,并且'vi'编辑器现在会在这些行的末尾显示^M
。
因此,解决方案是通过运行以下命令将CRLF结尾替换为LF结尾-
sed -i $'s/\r$//' config.xml
1条答案
按热度按时间xytpbqjk1#
如果原始XML文件的每一行都有CRLF行尾,则该问题可能与原始XML文件有关。如果是这种情况,
vim
将识别并隐藏它们,这样它们对您来说就不重要了。假设这样,所有使用vim
添加的新行都将包含这些相同的CRLF行尾。sed
命令在添加任何新行时使用LF行尾,因此当这种情况发生时,vim
会看到两个不同的行尾,并将LF行尾假定为常规行尾。这意味着所有CR行尾都将显示为^M
。如果您在编辑之前可以访问原始XML文件,则可以在
vim
中打开它,然后检查文件名旁边的页脚是否显示[dos]
,例如:Source。