Cat

加入帶有貓混淆的文件

  • October 6, 2014

如果我執行以下命令:

$ cat picture.jpg > copy1.jpg

$ cat -v picture.jpg > copy2.jpg

copy1.jpg是一個完美的副本picture.jpg,但copy2.jpgpicture.jpg.

我認為這是因為copy2.jpgcat 認為它的行尾都被替換為 a ^M,並且每個^M都比行尾大。它是否正確?

如果那樣做cat copy2.jpg,我發現沒有^Min的實例copy2.jpg

這裡發生了什麼?>如果 cat的輸出可能與其輸入不同,是否可以依靠 cat 完美地加入文件?

這不僅僅是^M每個帶有不可列印字元的字節(無論在您目前的語言環境中意味著什麼)都將擴展為cat -v.

如果您cat用於連接文件,則需要避免修改輸出的每個選項:-b-n(數字行),-E(用 標記行結尾$),-s(抑制重複的空行)-v-T(使用 printable 顯示不可列印字元人物)。

你的分析對我來說是正確的。我會cat用來加入文件,因為這是它的主要功能。只需在沒有-v開關或任何開關的情況下這樣做。

在文件上使用cat -v ..基本上已經破壞了它。您是否嘗試在圖像查看器中打開它?我試過你的方法,這正是我的情況。

file您也可以使用以下命令查看證據:

$ file copy*
copy1.png: PNG image data, 1440 x 847, 8-bit/color RGB, non-interlaced
copy2.png: ASCII text, with very long lines

cat的資訊頁面對這個主題有更多的了解:

'-v'
'--show-nonprinting'
    Display control characters except for LFD and TAB using '^'
    notation and precede characters that have the high bit set with
    'M-'.

On systems like MS-DOS that distinguish between text and binary
files, 'cat' normally reads and writes in binary mode.  However, 'cat'
reads in text mode if one of the options '-bensAE' is used or if 'cat'
is reading from standard input and standard input is a terminal.
Similarly, 'cat' writes in text mode if one of the options '-bensAE' is
used or if standard output is a terminal.

那麼^M在哪裡呢?

如果你打開你的copy2.jpg文件,vim你會看到裡面到處都是它們,例如:

                  SS#1

引用自:https://unix.stackexchange.com/questions/159509