コマンドライン出力の前に固定文字列を付ける方法は? [コピー]

コマンドライン出力の前に固定文字列を付ける方法は? [コピー]

次のコマンドを実行するとします。

sudo ./list_members Physicians 

次のように出力にプレフィックスを追加したいと思います。

Physicians [email protected]
Physicians [email protected]
Physicians [email protected]
Physicians [email protected]

StdOutputの前にこれらの接頭辞を付けることはできますか?

答え1

tsmoreutilsパッケージのユーティリティを使用することをお勧めします。主な目的は、出力行の前にタイムスタンプを追加することですが、タイムスタンプの代わりに任意の文字列を使用することもできます。

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_members2つ以上のパラメータを含める予定の場合は、それを使用して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

関連情報