次のデータがあり、すべてを1行にまとめる必要があります。
私はこれを持っています:
22791
;
14336
;
22821
;
34653
;
21491
;
25522
;
33238
;
私はこれを必要とする:
22791;14336;22821;34653;21491;25522;33238;
これらのコマンドはどれも完全に機能していません。
それらのほとんどは、次のようなデータを許可します。
22791
;14336
;22821
;34653
;21491
;25522
tr -d '\n' < yourfile.txt
編集:
ここに投稿されたコマンドがどれも機能しない場合、フィールドを区切る改行以外のものがあります。おそらく、ファイルにDOS/Windowsの行末文字があります(その場合でもPerlソリューションが機能すると期待していますが)。
試してください:
tr -d "\n\r" < yourfile.txt
それがうまくいかない場合は、ファイルをより詳しく調べて(たとえば16進エディタで)、削除したい文字が実際にそこにあるかどうかを調べる必要があります。
Perl -p -i -e 's/\R//g;' filename
仕事をしなければなりません。
paste -sd "" file.txt
つかいます
head -n 1 filename | od -c
何が問題のキャラクターであるかを理解するために。次に使用する
tr -d '\n' <filename
lF用
tr -d '\r\n' <filename
cRLF用
tr -d '\n' < file.txt
または
awk '{ printf "%s", $0 }' file.txt
または
sed ':a;N;$!ba;s/\n//g' file.txt
このページ here には、改行を削除する他の方法がたくさんあります。
猫の虐待を削除するために編集:)
Vimでファイルを編集できます。
$ vim inputfile
:%s/\n//g
オタクの事実:代わりにASCIIを使用してください。
tr -d '\012' < filename.extension
(編集された原因私は同じ解決策を持っていたフリッギンの答えを見ませんでした、唯一の違いは私のものがASCIIを持っていたことでした)
データがfile.txtにある場合:
echo $(<file.txt) | tr -d ' '
「$(<file.txt)
」はファイルを読み取り、その内容を一連の単語として提供し、「エコー」はそれらの間にスペースを入れてエコーします。次に、「tr」コマンドはスペースを削除します。
22791;14336;22821;34653;21491;25522;33238;
$ Perl -0777 -pe 's/\ n + // g'入力>出力
$ Perl -0777 -pe 'tr/\ n // d'入力>出力
xargs
も改行を使用します(ただし、最後の末尾の改行を追加します):
xargs < file.txt | tr -d ' '
Geditテキストエディターの使用(3.18.3)
\n\s
を入力します注:これは、OPの元の7年前の問題を正確に解決するものではありませんが、同様の「テキストをすべて1行で取得する方法」の質問でSEからここにたどり着く一部のnoob Linuxユーザー(私のような)に役立つはずです。
今日は同じケースで、vimまたはnvimで非常に簡単でした。gJ
を使用して行を結合できます。あなたのユースケースのために、ただ
99gJ
これにより、99行すべてが結合されます。結合する行数に応じて、必要に応じて99
の数を調整できます。 1行だけを結合する場合、gJ
だけで十分です。
Man 1 edの使用:
# cf. http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed
ed -s file <<< $'1,$j\n,p' # print to stdout
ed -s file <<< $'1,$j\nwq' # in-place edit
数字とセミコロンだけを保持したい場合、次のコードは大きなエンコードの問題がないと仮定してトリックを実行する必要がありますが、最後の「改行」も削除されます。
$ tr -cd ";0-9"
上記を簡単に変更して、他の文字を含めることができます。小数点、カンマなどを保持する場合.
ファイルの最後にある末尾の改行も削除するには
python -c "s=open('filename','r').read();open('filename', 'w').write(s.replace('\n',''))"
これにより、空白(スペースとタブ)のみを含むすべての行が削除されます。
sed '/^[[:space:]]*$/d'
作業しているものは何でも取って、そこにパイプするだけです
cat filename | sed '/^[[:space:]]*$/d'
特に奇妙なワードラップを修正するためにGUIでこれを行う必要がある場合は、最も明白で速い答えがありません。
gedit
を開きます
それから Ctrl + H、次にFind
テキストボックス\n
とReplace with
に空のスペースを入れてから、チェックボックスRegular expression
と出来上がりを埋めます。
私は通常、ファイルからコードスニペットをコピーし、不要な新しい行を追加せずにコンソールに貼り付けたいときにこのユースケースを取得し、bashエイリアスを作成することになりました
(興味がある場合はoneline
と呼びます)
xsel -b -o | tr -d '\n' | tr -s ' ' | xsel -b -i
xsel -b -o
はクリップボードを読み取ります
tr -d '\n'
は新しい行を削除します
tr -s ' '
は繰り返しスペースを削除します
xsel -b -i
はこれをクリップボードにプッシュします
その後、クリップボードの新しい内容をコンソールなどの1行に貼り付けます。
私はawkでそれをします、例えば.
awk '/[0-9]+/ { a = a $0 ";" } END { print a }' file.txt
(欠点は、aがメモリに「蓄積」されることです)。
編集
Printfを忘れました!だからまた
awk '/[0-9]+/ { printf "%s;", $0 }' file.txt
または、おそらくawkを使用して他のansで既に与えられたもの。