ドットを含まないファイルから行を削除するにはどうすればよいですか?


10

URLを含むデータを含むファイルがあります。しかし、URLではないさまざまな行があります。Ubuntuターミナルコマンドを使用してそれらを削除するにはどうすればよいですか?

参照用のサンプルファイルを以下に示します。サンプルデータ

com.blendtuts/S
°=
com.blengineering.www/:http
±=

出力したい:

com.blendtuts/S
com.blengineering.www/:http

余分な不要な行にはドットがありません。したがって、ドットのない線を削除したい

回答:


30

片道 sed

sed '/\./!d' file
  • /\./リテラルドットに一致(\そうでない場合は.任意の文字に一致するためエスケープされます)
  • !d 一致したパターンを除くすべてを削除する

その場でファイルを編集する場合は-i、テスト後にコマンドに追加します。(フラグに追加.bakして、ファイルのローカルバックアップを作成することもできます。)-ised -i.bak ...

sed -i '/\./!d' file

26

あなたは新しいファイルにドットですべてをgrepできます:

grep "\."  file > newfile

これにより、古いファイルを保存できます。


10

または、ドットを含む行を保持します。

sed -ni.bak '/\./p' infile

8

awk最後の1つはパーティーに欠けていると思います。

$ awk -F\. 'NF>1' file
com.blendtuts/S
com.blengineering.www/:http

これにより、フィールド区切り文字がドットに設定されます。次に、少なくとも2つのフィールドがある行を印刷することです。これは、少なくとも1つのドットが発生することを意味します。


3
より単純なawkソリューションは、grepと同じようにそれを実行することawk '/\./' fileです。つまり、文字「。」を含む行のみを出力します。
Chris Midgley

@ChrisMidgleyいいね!これはgrep既に提案された答えですので、私はいくつかのawk
特定の


6

これはvimでかなり簡単に実行できます。vimをテキストエディタ(ファイルを開く、編集、および書き込む)として使い慣れている場合は、次のようにします。

:g!/\./d

vimの使用に慣れていない場合、またはvimをコマンドラインツールとして使用したい場合は、ターミナルから実行するだけです。

vim file -c "g!/\./d" -c "wq"

これを少し変更して、新しいファイルに保存できます。

vim file -c "g!/\./d" -c "w newfile" -c "q!"

これは、vimの「グローバル」コマンドを使用します。このコマンドは、正規表現に一致する(または一致しない)すべての行にexコマンドを適用します。この場合、コマンドは「(d)elete」であり、正規表現に一致しないすべてのコマンドに適用されます\.

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.