web-dev-qa-db-ja.com

改行を追加せずに2つのファイルを連結します

2つのファイルをnanoし、そのうちの1つは改行を入力せずに「this」を読み取り、もう1つは改行を入力せずに「is」を読み取る場合、cat2つのファイルを一緒に「thisis」のようなものにします。

代わりに、改行が自動的に挿入されます。

alec@ROOROO:~/$ cat test1 test2 > test3
alec@ROOROO:~/$ cat test3
this
is

では、改行を追加せずに2つのファイルを連結するにはどうすればよいですか?

5
ixtmixilix

これらの末尾の改行は、nanoではなくcatによって追加されます。

nano-Lパラメーターを使用します。

-L (--nonewlines)
    Don't add newlines to the ends of files.

または〜/ .nanorcのnonewlinesコマンド:

set/unset nonewlines
    Don't add newlines to the ends of files.
13
manatwork

それが起こっている場合、あなたは間違いなくあなた自身に改行文字を挿入しています。 catは、いつものようにそれらを連結します。 catを使用して最初に書き込み、次に連結することで、これをテストできます。

cat > file1
# write something
# hit Ctrl+D twice to end file
# repeat steps with file2
cat file1 file2
2
user13742

catは改行を追加しません。改行はtest1の終わりにすでに存在します。これは正常です。テキストファイルは一連の行で構成され、1行は一連の印刷可能な文字とそれに続く改行文字で構成されます。したがって、空でないテキストファイルはすべて改行文字で終わります。

2つのテキストファイルがあり、それらを連結する場合は、catを使用します。最初のファイルの行に続いて2番目のファイルの行が表示されます。

より複雑なこと、つまり最初のファイルの最後の行を2番目のファイルの最初の行に結合する場合は、より複雑なコマンドが必要です。たとえば、最初のファイルの最後の文字を削除して、2番目のファイルを追加できます。 GNU coreutils(つまり、組み込みLinux以外の場合)を使用すると、次のことができます。

{ <test1 head -c -1 && cat test2; } >test3

または2つのステップで:

<test1 head -c 1 >test3 && <test2 cat >>test3

一方通行:

paste -d'\0' test1 test2

出力:

thisis
1
Birei