将命令替换为远程sed命令

时间:2014-10-23 03:42:43

标签: linux bash unix sed command-substitution

我想编写一个Unix命令,从/ etc / passwd中选择一个随机用户,并使用SHH检查远程主机,以确定是否存在具有相同UID的用户,如果用户存在,则从passwd打印出整行。

这是我到目前为止写的命令:

echo `shuf -n 1 /etc/passwd | cut -d ":" -f 3' | ssh 100.64.0.2  sed -n -e '/**xargs**/p' /etc/passwd

似乎sed命令不会将xargs作为本地机器的参数,而是文本

任何想法都会非常感激!

2 个答案:

答案 0 :(得分:0)

你试图写这样的东西

user=$(shuf -n 1 /etc/passwd | cut -d ":" -f 3)
ssh 100.64.0.2  sed -n -e "/$user/p" /etc/passwd

但您可能还想考虑使用getent

user=$(shuf -n 1 /etc/passwd | cut -d ":" -f 3)
ssh 100.64.0.2  getent passwd "$user"

正如我在OP xargs的评论中所说,是一个命令。从标准输入读取值并将其粘贴在命令行上并不神奇。 (请注意,即使作为一个概念,也存在一个排序问题,因为根据定义,命令行是在可能存在任何标准输入之前构造的。)

答案 1 :(得分:0)

for f in `cat hostlist.txt`; do echo "### $f ###";  ssh $f find / -name "tmp" | sed "s/^/'$f  | '/" ;  done 2>/dev/null

我很难为find命令的每一行打印主机名,这有助于解决。