使用 xargs grep 在 bash 中的字符串中添加了额外的空间,并且无法删除它



让这个正常工作有点麻烦。到目前为止,我已经尝试了许多不同的解决方案,但我似乎无法得到我想要的结果。我还是一个bash新手,但希望这不是我忽视的东西。下面是我正在处理的:

cd ~/tools/bi/pdi/simple-jndi && find -name "jdbc*" | head -1 |
     xargs grep - m 1 "BILoadDS/user=" > ./test.txt
sed -i 's/ //g' test.txt
user=$(cat test.txt)
#outputs count of 26
echo ${#user}
#outputs "BILoadDS/user=john.smithy"
echo $user

这就是我的问题出现的地方。输出的字面值字符串只有25个字符长。为什么我得到的计数显示了额外的计数?对于更多的上下文,我最终尝试将用户(在"="之后)作为变量子字符串,用于创建到远程主机的ssh连接。到目前为止,这种做法一直失败。我猜这是因为我似乎无法摆脱这个额外的角色。我尝试过的解决方案有:

  • 各种sed替代品

  • xargs grep管道到sed,而不是先写入文件

  • 使用awk子字符串我想要的;它仍然输出1个额外的长度

如果我将字符串粘贴到Excel中,len()也返回25。我只是不明白为什么我不能摆脱这个讨厌的额外字符!

额外的字符是字符串末尾的''。这是必需的,因为它表示字符串的结束。

如果你得到一个额外的字符,它必须是一个非打印符号。试着运行cat,使用显示非打印符号的选项:

  • -e显示非打印符号和带有$ symbol的行尾。
  • -t显示带有^|符号的非打印符号和制表符。

关于cat的更多信息在这里。

只获取用户:

sed -i 's/.*= *//' test.txt

这将删除从该行开始直到找到的最后一个相等符号的所有字符以及该符号之后的额外空格。因此,它只得到等号后面的用户。

最新更新