次のように、タブで区切られたデータを含む文字列があります。
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)-リリース(x86_64-redhat-linux-gnu)
- 猫:coreutils-8.4-37.0.1.el6.x86_64
ベストアンサー1
シェルに入力すると、シェルは特定の文字をコマンドとして認識します。たとえば、キャリッジリターン文字(keypressによって送信された文字Enter)は、シェルにコマンドを実行させるようにします。タブ文字はシェルに完了操作を実行させます。 PuTTY端末ウィンドウに何かを貼り付けると、シェルの観点からその文字を入力するのと同じです。したがって、タブ文字を貼り付けると、シェルは完成しますが、タブ文字は挿入しません。
ファイルを変換せずにコピーする最も簡単な方法は、PuTTYの補助プログラムPSCPまたはPSFTPを使用してファイルをコピーすることです。概念的には、これは最も簡単なアプローチですが、他のプログラムの実行、認証、ディレクトリの選択などのオーバーヘッドがあります。
コンテンツをインラインで必要に応じて、ここにcat
直接文書に貼り付けるのではなく、コンテンツに直接貼り付けることができます。次に、シェルの行エディタではなく端末の行エディタに貼り付けます。端末の行エディタは非常にプリミティブなので、タブを除くいくつかの制御文字だけが特別な意味を持ちます。Ctrl入力を終了するには、行の先頭で+を押します。D
[darkstar /]$猫>text.txt Paste Ctrl+D [ダークスター/]$
制御文字を解釈する媒体を介して任意のデータを転送したい場合は、「飼いならされた」文字のみを使用する形式でエンコードできます。Base64制御文字を使用せず、スペースと改行文字を無視します。 GNU coreutils は Linux と Cygwin の基本インストールの一部であり、以下を含みます。base64
注文する。発信者側では、base64 <file-to-decode
以下を実行します。
- Windows:
base64 c:/path/to/test.txt
Cygwin端末で実行 - 出力をコピーします。
- PuTTYウィンドウのシェルで `base64 -d> /tmp/test.txtと入力してを押しますEnter。
- 貼り付けた出力
base64
。 - Ctrl+を押しますD。