次のコマンドを実行するとします。
sudo ./list_members Physicians
次のように出力にプレフィックスを追加したいと思います。
Physicians [email protected]
Physicians [email protected]
Physicians [email protected]
Physicians [email protected]
StdOutputの前にこれらの接頭辞を付けることはできますか?
答え1
ts
moreutilsパッケージのユーティリティを使用することをお勧めします。主な目的は、出力行の前にタイムスタンプを追加することですが、タイムスタンプの代わりに任意の文字列を使用することもできます。
for line in {01..05}; do echo $line; done | ts "A string in front "
A string in front 01
A string in front 02
A string in front 03
A string in front 04
A string in front 05
答え2
使用Sトレメ編集する伊藤:
sudo ./list_members Physicians | sed 's/^/Physicians /'
ヘルパー機能にするには、次のことを好むawk
ことができます。
prefix() { P="$*" awk '{print ENVIRON["P"] $0}'; }
sudo ./list_members Physicians | prefix 'Physicians '
stdoutとstderrにプレフィックスを追加するには、次の方法で実行できます。
{
sudo ./list_members Physicians 2>&1 >&3 3>&- |
prefix 'Physicians ' >&2 3>&-
} 3>&1 | prefix 'Physicians '
答え3
以下を使用してこれを実行することもできますawk
。
$ sudo ./list_members | awk '{print "Physicians "$0}'
Physicians [email protected]
Physicians [email protected]
Physicians [email protected]
Physicians [email protected]
または以下を使用してxargs
:
$ sudo ./list_members | xargs -n1 echo 'Physician'
./list_members
2つ以上のパラメータを含める予定の場合は、それを使用してxargs
入力を分割できます\n
。
$ sudo ./list_members | xargs -n1 -d $'\n' echo 'Physician'
Physician [email protected] xxx
Physician [email protected] yyy
Physician [email protected] zzz
Physician [email protected] aaa
答え4
Bourneシェル(または親セットのBASH)を使用すると、ソリューションは100%POSIXのままになります。
sudo ./list_members | while read LINE; do echo "Prefix ${LINE}"; done