我正在使用Shell&TCL脚本登录到交换机并获取某些命令的输出,在某些地方我可以看到^D
出现。我尝试使用dos2unix
实用程序,但仍然没有消失。
Eth1/37 NOM: xcvrAbsen routed auto auto --
^DEth1/38 NOM: xcvrAbsen routed auto auto --
Eth1/39 NOM: xcvrAbsen routed auto auto --
Eth101/1/45 eth 1000 NOM:NO_PATCHING CABLE
^DEth101/1/46 eth 1000 NOM:NO_PATCHING CABLE
Eth101/1/47 eth 1000 NOM:NO_PATCHING CABLE
如何消除这种情况,是否有诸如dos2unix
这样的标准工具可以消除此类数据?
我要做的是比较来自相同开关,相同命令和相同输出的两个文件,但是由于这些^D
,Vimdiff将其显示为不同的行。
如何消除这种情况?
我正在使用的命令是这样的:
$cdir/ciscocmd -Y -u $operator -p $password -s $password -t $switch -r rfc_sa_commands | sed 's/^^D//' > $switch.$NOW
答案 0 :(得分:3)
dos2unix
删除回车符,不删除其他控制字符。
用于删除所有出现的任意字符的工具称为tr
。
tr -d '\004' <inputfile >outputfile
这假定您具有文字ctrl-D字符,而不是插入符号^
和D
的序列。 tr
实用工具无法删除特定序列;它只处理单个字符。要删除序列,您需要
sed 's/\^D//g' inputfile >outputfile
需要反斜杠的地方,因为单独的插入号在正则表达式中具有特殊含义(它与行首匹配)。加倍并不能逃脱它。 ^^
可能仍然只与行首匹配,尽管它的定义不是很明确,并且可能会引入明显的随机行为。
答案 1 :(得分:0)
即使特殊字符显示为'^ D',也可能无法像这样捕获。
有趣的读物是:
我认为一种解决方法是:
<your command>|sed -e 's/\x04//g'
它能解决您的问题吗?