1

次のように、行を複数の引数に変換できるユーティリティについて知っていxargsます。

echo -e "a\nb\nc\n" | xargs

結果:

a b c

しかし、私は取得したい:

a:b:c

文字:は例として使用されます。行間にセパレータを挿入して、単一の引数を取得できるようにしたいと考えています。どうすればいいですか?

4

3 に答える 3

1

NEWLINES を 1 文字ずつ変更する単一の引数に変更したい複数行のファイルがある場合は、次のpasteコマンドが必要です。

$ echo -en "a\nb\nc\n" | paste -s -d ":"
a:b:c

次に、コマンドは次のようになります。

your_command "$(paste -s -d ":" your_file)"

編集:

区切り文字として複数の文字を挿入したい場合は、sedbeforeを使用できますpaste:

your_command "$(sed -e '2,$s/^/<you_separator>/' your_file | paste -s -d "")"

または、より複雑な単一のを使用しますsed

your_command "$(sed -n -e '1h;2,$H;${x;s/\n/<you_separator>/gp}' your_file)"
于 2013-03-12T10:25:12.453 に答える
1

あなたが与えた例は私にはうまくいきません。次のものが必要です。

echo -e "a\nb\nc\n" | xargs

取得するa b c

必要に応じて、これを行うことができます:

echo "a b c" | awk 'OFS=":" {print $1, $2, $3}'

セパレーターをスペースから、:または希望するものに変更します。

次のものも使用できますsed

echo "a b c" | sed -e 's/ /:/g

それが出力されますa:b:c

これらすべてのデータ処理の後、必要なxargsコマンドを実行するために使用できます。ただ| xargs、やりたいことは何でもしてください。

それが役に立てば幸い。

于 2013-03-12T09:45:54.510 に答える
0

を使用して行を結合し、を使用してスペース( )を xargs置き換えることができます。' 'sed

echo -e "a\nb\nc"|xargs| sed -e 's/ /:/g'

結果として

a:b:c

明らかに、この出力を別のコマンドを使用する他のコマンドの引数として使用できますxargs

echo -e "a\nb\nc"|xargs| sed -e 's/ /:/g'|xargs

于 2013-03-12T10:23:04.227 に答える