web-dev-qa-db-ja.com

複数行の出力を1行に連結する方法は?

コマンドcat file | grep patternを実行すると、多くの行が出力されます。すべての行を1行に連結し、各"\n""\" "に効果的に置き換えるにはどうすればよいですか(末尾に"があり、その後にスペースが続きます)?

cat file | grep pattern | xargs sed s/\n/ /gが機能していません。

99
T. Webster

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" 
158
Chris Seymour

出力をxargsにパイピングすると、出力の各行がスペースのある1行に連結されます。

grep pattern file | xargs

または任意のコマンド、例えば。 ls | xargsxargs出力のデフォルトの制限は〜4096文字ですが、たとえば、 xargs -s 8192

grepxargs

49
bluebadge

引用符なしのbashエコーでは、キャリッジリターン、タブ、および複数のスペースを削除します

echo $(cat file)
39
user1699917

これはあなたが望むものかもしれません

cat file | grep pattern | paste -sd' '

あなたの編集に関しては、おそらくこれが何を意味するのか分かりません。

cat file | grep pattern | paste -sd'~' | sed -e 's/~/" "/g'

(これはfile~が発生しないことを前提としています)

17
sehe

これは、コンマで区切られた出力を生成する例です。必要な区切り文字でコンマを置き換えることができます。

cat <<EOD | xargs | sed 's/ /,/g'
> 1
> 2
> 3
> 4
> 5
> EOD

生成するもの:

1,2,3,4,5
2
Richard Gomes

ex editorVim の一部)を使用する方法は次のとおりです。

  • Joinすべての行とprintを標準出力に:

    $ ex +%j +%p -scq! file
    
  • Jo in-place in-place(ファイル内):

    $ ex +%j -scwq file
    

    注:これにより、ファイル自体内のすべての行が連結されます。

1
kenorb

おそらくそれを行う最良の方法は、出力を1行に生成する「awk」ツールを使用することです

$ awk ' /pattern/ {print}' ORS=' ' /path/to/file

すべての行をスペース区切りで1つにマージします

0