使用shell

时间:2018-10-19 09:10:11

标签: linux bash shell

我正在使用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

2 个答案:

答案 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'

它能解决您的问题吗?