-1

我正在寻找一种绕过文件读写的方法。是否可以直接在命令结果上使用 sed? #!/bin/sh使用了,因为我使用了 NetBSD,sed -i所以我必须使用sed -e然后将结果重定向到文件。

命令的结果disklabel xbd0

netbsd# disklabel xbd0 >/file ;
# /dev/rxbd0d:
type: unknown
disk: xbd0
label: 
flags:
bytes/sector: 512
sectors/track: 2048
tracks/cylinder: 1
sectors/cylinder: 2048
cylinders: 1000
total sectors: 2048000
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0           # microseconds
track-to-track seek: 0  # microseconds
drivedata: 0 

16 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a:   2048000         0     4.2BSD   1024  8192     0  # (Cyl.      0 -    999)
 c:   2048000         0     unused      0     0        # (Cyl.      0 -    999)
 d:   2048000         0     unused      0     0        # (Cyl.      0 -    999)


netbsd# disklabel xbd0 | sed -e "s/match1/replace/" \
-e "s/match2/replace/" \
-e "s/match3/replace/" /file > /file.1 ;

如何在另一个命令中发送结果?

$ new_command -add $(results)
4

3 回答 3

3

您已经成功地将 to 的结果通过管道disklabel传输sed。那么为什么不直接将结果sed传递给 new_command 呢?

disklabel xbd0 | sed -e "s/match/replace/" | new_command

例如,将 sed 的输出通过管道传输到sort,然后将其输出通过管道传输到grep.

于 2013-03-26T15:00:39.757 回答
2

如何在另一个命令中发送结果?作为$ new_command -add $(results)

如果这真的是您的意思,您可以使用以下xarg命令来实现:

disklabel xbd0 | sed -e "s/match/replace/" | xargs new_command -add

请注意,这xargs会破坏您在空格处的输入,如果您只想要一个大参数,您可以使用xargs -0.

很可能最好进行设计new_command,使其从stdin辅助管道获取输入并通过该输入传递。

于 2014-09-13T08:05:47.560 回答
0

在您的代码中,您尝试将命令的输出重定向到 /file,除非您以超级用户身份执行此操作,否则您将获得 "permission denied" 。要将一个命令的结果发送到另一个命令,请执行以下操作:

command2 `command1` #if command2 needs output of command1 as an argument

或者

command2 $(command1)  #if command2 needs output of command1 as an argument
于 2013-03-26T15:09:10.567 回答