Bashシェルの私のコマンドは次のように出力されます。
username
country
しかし、印刷物を次のように修正したいと思います。
username - country
ありがとうございます。
答え1
私は次のことをします:
$ seq 6 | awk '{printf "%s", sep $0; sep = " - "}; END {if (NR) print ""}'
1 - 2 - 3 - 4 - 5 - 6
または:
$ seq 6 | paste -d ' - \n' - /dev/null /dev/null -
1 - 2
3 - 4
5 - 6
または:
$ seq 5 | sed '$!N;s/\n/ - /'
1 - 2
3 - 4
5
2行の出力であれば、次のようにすることもできます。
$ seq 2 | { IFS= read -r a; IFS= read -r b; printf '%s\n' "$a - $b"; }
1 - 2
シェルにはbash
where 、同じread
ものprintf
が組み込まれており、別のコマンドを実行する必要はありません。この処理を実行するために、追加のプロセス生成をbash
保存するオプションを設定できますlastpipe
(非対話型シェルインスタンスのみ)。
答え2
tr
ある文字を別の文字に変換できます。
echo "username
country
town" | tr '\n' ' '
出力:
username country town
tr -d
文字(改行)を何もないものに置き換えるために使用されます。
echo "username
country
town" | tr -d '\n'
出力:
usernamecountrytown
しかし、改行文字をいくつかの文字で置き換える場合は、tr
これだけでは不十分です。それにもかかわらず、非常に簡単なコマンドなので、これについて話しています。
しかし、次のようにすることができますsed
。
echo "username
country
town" | sed ":a; N; s/\n/ - /; ta;"
出力:
username - country - town
答え3
awk 'ORS=" - "{print $0}' filename|awk '{gsub(/- $/,"",$0);print }'
出力
username - country
答え4
パイプを介してここに接続します。
sed -z 's|\n| - |'
GNUを使用してsed
改行文字を-
。