コマンドcat file | grep pattern
を実行すると、多くの行が出力されます。すべての行を1行に連結し、各"\n"
を"\" "
に効果的に置き換えるにはどうすればよいですか(末尾に"
があり、その後にスペースが続きます)?
cat file | grep pattern | xargs sed s/\n/ /g
が機能していません。
tr '\n' ' '
を使用して、すべての改行文字をスペースに変換します。
$ grep pattern file | tr '\n' ' '
注:grep
はファイルを読み取り、cat
はファイルを連結します。 cat file | grep
をしないでください!
編集:
tr
は、単一文字の変換のみを処理できます。 awk
を使用して、出力レコードの区切り文字を次のように変更できます。
$ grep pattern file | awk '{print}' ORS='" '
これは変換されます:
one
two
three
に:
one" two" three"
引用符なしのbashエコーでは、キャリッジリターン、タブ、および複数のスペースを削除します
echo $(cat file)
これはあなたが望むものかもしれません
cat file | grep pattern | paste -sd' '
あなたの編集に関しては、おそらくこれが何を意味するのか分かりません。
cat file | grep pattern | paste -sd'~' | sed -e 's/~/" "/g'
(これはfile
で~
が発生しないことを前提としています)
これは、コンマで区切られた出力を生成する例です。必要な区切り文字でコンマを置き換えることができます。
cat <<EOD | xargs | sed 's/ /,/g'
> 1
> 2
> 3
> 4
> 5
> EOD
生成するもの:
1,2,3,4,5
おそらくそれを行う最良の方法は、出力を1行に生成する「awk」ツールを使用することです
$ awk ' /pattern/ {print}' ORS=' ' /path/to/file
すべての行をスペース区切りで1つにマージします