Linux でテキストから改行文字を削除する方法

Linux でテキストから改行文字を削除する方法

復帰文字 ( Ctrl+M ) に不安を感じても心配しないでください。それらを排除する簡単な方法がいくつかあります。

「キャリッジ リターン」文字の歴史は古く、タイプライターに紙ローラーを保持するフレームを右に動かし、文字を左側に再度入力できるようにする機構またはレバーがあった時代にまで遡ります。 Windows 上のテキスト ファイルではこれが維持されましたが、Linux システムでは維持されませんでした。この非互換性により、Windows で作成されたファイルを Linux で操作しようとすると問題が発生することがありますが、これは非常に簡単に修正できます。

od ( を使う場合 )オクタルダンプ8進ダンプ) コマンドでは、キャリッジ リターン ( Ctrl+Mでも表されます) 文字が 8 進数 15 として表示されます。 CRLF文字は、Windows テキスト ファイルの行を終了する復帰と改行のシーケンスを表すためによく使用されます。 8 進ダンプに注目すると\r\n表示されます。対照的に、Linux のテキストは改行文字でのみ終了します。

以下はod出力の例です。行内のCRLF文字が強調表示され、その 8 進数表記も表示されます。

$ od -bc テストファイル.txt
0000000 124 150 151 163 040 151 163 040 141 040 164 145 163 164 040 146
  これはテストです
0000020 151 154 145 040 146 162 157 155 040 127 151 156 144 157 167 163
  Windowsからのファイル
0000040 056 015 012 111 164 047 163 040 144 151 146 146 145 162 145 156 <==
  . \r \n それは違います <==
0000060 164 040 164 150 141 156 040 141 040 125 156 151 170 040 164 145
  tthana U nixte
0000100 170 164 040 146 151 154 145 015 012 167 157 165 154 144 040 142 <==
  xtfile \r \nwouldb <==

これらの文字は大きな問題ではありませんが、何らかの方法でテキストを解析し、その存在をエンコードしたくない場合は、混乱が生じることがあります。

テキストから改行を削除する 3 つの方法

幸いなことに、改行文字を簡単に削除する方法がいくつかあります。次の 3 つのオプションがあります。

dos2unix

インストールに問題があるかもしれませんが、 dos2unixおそらく Windows テキストを Unix/Linux テキストに変換する最も簡単な方法です。コマンドは 1 つのパラメータを取ります。 2 番目のファイル名は必要ありません。ファイルは直接変更されます。

$ dos2unix テストファイル.txt
dos2unix: ファイル testfile.txt を Unix 形式に変換しています...

ファイルに含まれる行数に応じて、ファイルの長さが短くなることがわかります。 100 行を含むファイルは、最後の行のみがCRLF文字で終了していないため、99 文字削減される可能性があります。

前に:

-rw-rw-r-- 1 shs shs 121 9月14日 19:11 testfile.txt

後:

-rw-rw-r-- 1 shs shs 118 9月14日 19:12 testfile.txt

多数のファイルを変換する必要がある場合は、一度に 1 つずつ修復しないでください。代わりに、すべてを 1 つのディレクトリに入れて、次のようなコマンドを実行します。

$ find . -type f -exec dos2unix {} \;

このコマンドでは、 findを使用して通常のファイルを検索し、 dos2unixコマンドを実行してファイルを 1 つずつ変換します。コマンド内の{}はファイル名に置き換えられます。実行するときは、ファイルを含むディレクトリにいる必要があります。このコマンドは、テキスト ファイル以外のコンテキストで 8 進数 15 を含むファイル (画像ファイル内のバイトなど) など、他の種類のファイルを破損する可能性があります。

sed

ストリーム エディタsedを使用して、改行を削除することもできます。ただし、2 番目のファイル名を指定する必要があります。以下にいくつか例を挙げます。

$ sed -e “s/^M//” before.txt > after.txt

注意すべき非常に重要な点の 1 つは、表示されている文字を入力しないことです。 ^M入力するには、 Ctrl+Vを押してからCtrl+Mを押す必要があります。 sは代替コマンドです。スラッシュは、検索するテキスト ( Ctrl + M ) と、それを置換するテキスト (ここでは何もなし) を区切ります。

6 六

viを使用して改行を削除することもできます ( Ctrl+M ) が、これは何百ものファイルを開いているわけではなく、おそらく他の変更を加えていることを想定しています。 :と入力してコマンド ラインに入り、次の文字列を入力します。 sedと同様に、コマンド内の^M Ctrl+V^ 、次にCtrl+MMを挿入する必要があります。 %s置換操作であり、スラッシュは削除する文字とそれを置き換えるテキスト (なし) を区切ります。 g (グローバル) はすべての行で実行することを意味します。

:%s/^M//g

要約する

dos2unixコマンドは、おそらくテキストから改行を削除する最も覚えやすく、最も信頼性の高い方法です。他のオプションは使い方が少し難しいですが、基本的な機能は同じです。

出典: https://www.networkworld.com/article/3438857/how-to-remove-carriage-returns-from-text-files-on-linux.html

要約する

上記は、Linux でテキスト内の改行文字を削除するために私が紹介した方法です。お役に立てば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • sed コマンドを使用して文字列を置換する Linux チュートリアル
  • Linux の特殊文字とその機能
  • Linux シェル文字列に組み込まれた一般的な操作 (長さの取得、検索、置換)
  • Linux シェル スクリプトで文字列を連結する方法
  • Linux シェルがユーザーが入力した指定範囲内の単一文字を取得するための 2 つの方法
  • Linux bash 文字列処理百科事典

<<:  Vueはシンプルなショッピングカートの例を実装します

>>:  MySQL で重複しない携帯電話番号テーブルをバッチ生成する方法のサンプルコード

推薦する

uniapp アプレットでウォーターフォール フロー レイアウトを実装するためのアイデアとコード

1. はじめに今、ウォーターフォールフローについて書くことは、古い内容の焼き直しと見なされますか?気...

JavaScript ファイルの読み込みとブロックの問題: パフォーマンス最適化のケーススタディ

まず質問させてください。HTML ページを作成するときに、外部から JS ファイルをインポートする場...

vue3ソースコード解析の簡単な実装方法

目次序文🍹準備🍲vue3 の使い方🍖 実装要約する序文最近、私の最初の公式 vue3 + ts プロ...

Linux の wget コマンドの詳細な紹介

目次まずwgetをインストールするヘルプマニュアルを見る1. wgetを使用して単一のファイルをダウ...

CSS 配置レイアウト (位置、配置レイアウト スキル)

1. ポジショニングとは何ですか? CSS の position 属性には、absolute/re...

Docker を使用した war パッケージ プロジェクトのデプロイの実装

Docker で war をデプロイするには、コンテナを使用する必要があります。ここでは tomca...

Linux seqコマンドの使い方の詳しい説明

01. コマンドの概要seq コマンドは整数のシーケンスを生成するために使用されます。 02. コマ...

エラー mysql テーブル 'performance_schema...解決方法

テスト環境は、JDBCドライバを使用してMariaDB 5.7でセットアップされています。 <...

MySQL 8.0.12 インストール設定方法とパスワード変更

この記事ではMySQL 8.0.12のインストールと設定方法を参考までに記録します。具体的な内容は以...

特定の MySQL テーブルの完全データと増分データをメッセージ キューに同期する - ソリューション

目次1. 当初の需要2. 解決策3. 運河の導入と設置運河の仕組み建築インストール4. 検証1. 当...

nginx + php の「入力ファイルが指定されていません」の解決策

本日、ローカル開発環境で突然「入力ファイルが指定されていません」というエラーが発生してしまいました。...

MySQLインデックスを最適化する方法

1. MySQL のインデックスの使用方法インデックスは、特定の列の値を持つ行をすばやく見つけるため...

Docker コンテナの正常なシャットダウン前にトラップを使用して環境のクリーンアップを実行する

実行中のコンテナが終了したときに、コンテナが完全に終了する前に環境をクリーンアップするなど、いくつか...

Expressプロジェクトファイルディレクトリの説明と詳細な機能の説明

app.js: スタートアップファイル、またはエントリファイルpackage.json: プロジェク...

Vue h関数の使い方の詳しい説明

目次1. 理解2. 使用1. h() パラメータ2. 使い方が簡単3. カウンターケースを実装する4...