web-dev-qa-db-ja.com

テキストファイルにスペースを改行/入力で置き換える方法は?

「example」という名前の簡単なテキストファイルがあります。

端末コマンドによる読み取り:cat example

出力:

abc cdef ghi jk lmnopq rst uv wxyz

私はconvert(transform)を次の形式にしたい:(cat exampleからの期待される出力)

abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz

コマンドライン経由でこれを行うにはどうすればよいですか?

(これは単なるサンプルファイルです。convert縦列でのWordの位置)

14
Pandya

いくつかの選択肢:

  1. クラシック、trを使用:

    tr ' ' '\n' < example
    
  2. cutを使用します

    cut -d ' ' --output-delimiter=$'\n' -f 1- example
    
  3. sedを使用します

    sed 's/ /\n/g' example
    
  4. Perlを使用します

    Perl -pe 's/ /\n/g' example
    
  5. シェルを使用する

    foo=$(cat example); echo -e ${foo// /\\n}
    
31
terdon

以下のコマンドを試してください

awk -v RS=" " '{print}' file

OR

awk -v RS='[\n ]' '{print}' file

例:

$ awk -v RS=" " '{print}' example
abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz

説明:

RS(レコードセパレーター)は、組み込みのawk変数です。最初のコマンドでは、Record separator変数に指定された値はスペースです。そのため、awkは、スペースが見つかるたびに行の印刷を中断します。

2番目のコマンドでは、RS変数に指定された値はスペースまたは改行文字です。このコマンドは、最初のコマンドの実行中に表示される余分な空白行を削除します。

16
Avinash Raj

xargsを使用できます。

cat example | xargs -n 1

または、より良い

xargs -n 1 < example
8
souravc

Perl onelinerの使用:

Perl -p -i -e 's/\s/\n/g' example

スペースとタブを「ENTER」(別名\n)に置き換えます

2
Sylvain Pineau

誰もpythonを投稿していないので、ここにそれがあります:

python -c "import sys;lines=['\n'.join(l.strip().split()) for l in sys.stdin.readlines()];print('\n'.join(lines))" < input.txt 

入力ファイルをpythonのstdinストリームにリダイレクトし、1行ずつ読み取ります。各行の末尾の改行は削除され、単語に分割され、各単語が改行で区切られた1つの文字列に再結合されます。これは、行ごとに1つの単語があり、お互い。最終的には文字列のリストになり、それが再び大きな文字列に結合され、stdoutストリームに出力されます。後で> out.txtリダイレクトを使用して別のファイルにリダイレクトできます。

1

上記の 'tr'に似ていますが、追加されています:

  • タブでも機能します

  • 複数のスペースまたはタブを1つの改行に変換します

    tr -s '[:space:]' '\n' < example
    
0
AstroTom