將一些帶有標籤的文本粘貼到 PuTTY 視窗中的此處文件中
我有一個帶有製表符分隔數據的字元串,如下所示:
h1 h2 a1 b1 a2 b2
我在 Windows 上用記事本製作了它。我創建了製表符分隔的數據,確保使用製表符而不是空格。
我使用 PuTTY 通過 SSH 連接到 Linux 伺服器。我想將文件寫入
/tmp/test.txt
並保留選項卡。所以我跑cat <<EOF >/tmp/test.txt
。我從記事本複製文本並將其粘貼到膩子會話中。然後我進入EOF
。但是,這會生成一個沒有選項卡的文件,其內容如下:
h1h2 a1b1 a2b2
我發現這有效:
sed 's/\\t/\t/g' > /tmp/test.txt << EOF h1\th2 a1\tb1 a2\tb2 EOF
但是,它要求我將輸入字元串更改為使用 ‘\t’ 而不是實際的製表符。什麼是更優雅/更簡單的解決方案,它允許我從 Windows 中按原樣獲取字元串文字並將其寫入遠端 Linux 機器上的文件中?
我通過 putty 從 Windows SSH 連接到 Linux 伺服器。伺服器是:
- 發行版:Red Hat Enterprise Linux Server 6.6 版(聖地亞哥)
- Bash 版本:4.1.2(1)-release (x86_64-redhat-linux-gnu)
- 貓:coreutils-8.4-37.0.1.el6.x86_64
當您在 shell 中鍵入時,shell 會將某些字元辨識為命令。例如,輸入符(
Enter
按鍵發送的字元)使 shell 執行命令。製表符使 shell 執行完成。當您將某些內容粘貼到 PuTTY 終端視窗中時,從 shell 的角度來看,這與您鍵入這些字元是一樣的。因此,在粘貼製表符時,shell 執行完成,它不插入製表符。在不轉換文件的情況下複製文件的最簡單方法是使用 PuTTY 的配套程序 PSCP 或 PSFTP 來複製文件。這是概念上最簡單的方法,但它確實有執行另一個程序、驗證、選擇目錄等的成本。
如果您想要內聯的內容,您可以直接粘貼到
cat
中,而不是在此處的文件中。然後您將粘貼到終端的行編輯器中,而不是粘貼到 shell 的行編輯器中。由於終端的行編輯器非常原始,只有少數控製字元有特殊含義,不包括製表符。在行首按Ctrl
+以終止輸入。D
[暗星/]$ cat >text.txt Paste Ctrl+D [暗星/]$
如果您想通過解釋控製字元的介質傳輸任意數據,您可以將其編碼為僅使用“馴服”字元的形式。Base64為一;它不使用任何控製字元並忽略空格和換行符。GNU coreutils 是 Linux 和 Cygwin 上基本安裝的一部分,它包含一個
base64
命令. 在發送方,執行base64 <file-to-decode
,例如
- 在 Windows 上:
base64 c:/path/to/test.txt
從 Cygwin 終端執行- 複製輸出。
- 在 PuTTY 視窗的 shell 中,鍵入
base64 -d >/tmp/test.txt 並按
Enter`。- 粘貼來自 的輸出
base64
。- 按
Ctrl
+D
。