-1

ファイルの読み取り/書き込みをバイパスする方法を探しています。コマンドの結果にsedを直接使用することは可能ですか? #!/bin/shNetBSDを使用したので、が使用されていますが、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

の結果はすでに正常にパイプdisklabelされていsedます。では、結果をsednew_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ください。1つの大きな引数が必要な場合は、を使用できますxargs -0

おそらく、補助パイプから入力を受け取り、この入力を補助パイプに通すnew_commandように設計するのが最善です。stdin

于 2014-09-13T08:05:47.560 に答える
0

コードで、コマンドの出力を/ fileにリダイレクトしようとすると、スーパーユーザーとして実行していない限り、「許可が拒否されました」というメッセージが表示されます。あるコマンドの結果を別のコマンドに送信するには、次のようにします。

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 に答える