回答:
「.com」に続くすべてを明示的に削除するには、既存のsedソリューションを微調整して「.com(anything)」を「.com」に置き換えます。
sed 's/\.com.*/.com/' file.txt
最初の期間を逃れるために正規表現を調整しました。そうでなければ、「thisiscommon.com/something」のようなものに一致するでしょう。
「sub.com.domain.com/foo」のようなものを誤ってトリミングしないように、末尾のスラッシュで「.com」パターンをさらにアンカーしたい場合があることに注意してください。
sed 's/\.com\/.*/.com/' file.txt
次の方法でawk
のフィールド区切り文字(-F
)を使用できます。
$ cat file
google.com/funny
unix.stackexchange.com/questions
isuckatunix.com/ireallydo
$ cat file | awk -F '\\.com' '{print $1".com"}'
google.com
unix.stackexchange.com
isuckatunix.com
説明:
NAME
awk - pattern scanning and processing language
-F fs
--field-separator fs
Use fs for the input field separator (the value of the FS predefined variable).
あなたは後にすべてのものを削除するよう.com
、-F '.com'
とのラインを分離.com
し、print $1
前に出力に一部のみを提供します.com
。したがって、期待される出力を$1".com"
追加.com
して提供します。
acomercial.com/asdsad
非対話型のインプレースファイル編集に最適なツールはex
です。
ex -sc '%s/\(\.com\).*/\1/ | x' file.txt
使用vi
したことがあり、コロンで始まるコマンドを入力したことがある:
場合は、exコマンドを使用しました。もちろん、この方法で実行できるより高度なまたは「派手な」コマンドの多くはVim拡張機能(例:bufdo
)であり、POSIX仕様でex
は定義されていませんが、これらの仕様により、非ビジュアルテキストの編集(インタラクティブまたは自動)。
上記のコマンドにはいくつかの部分があります。
-s
サイレントモードを有効にしてex
、バッチ使用の準備をします。(出力メッセージの抑制など)
-c
ファイル(file.txt
この場合は)がバッファで開かれたときに実行するコマンドを指定します。
%
は、1,$
次のコマンドがバッファのすべての行に適用されることを意味するアドレス指定子です。
s
既におなじみの代替コマンドです。で一般的に使用されvi
、のs
コマンドとsed
本質的に同じ機能を備えていますが、高度な正規表現機能の一部は実装によって異なる場合があります。この場合、「。com」から行末までが「.com」に置き換えられます。
垂直バーは、実行される順次コマンドを区切ります。多くの(ほとんどの)ex
実装では-c
、次のような追加オプションも使用できます。
ex -sc '%s/\(\.com\).*/\1/' -c x file.txt
ただし、これはPOSIXでは必要ありません。
x
コマンドが終了すると、ファイルに変更を書き込んだ後。wq
どちらが「書き込みと終了」を意味するかとは異なりx
、バッファが編集されている場合にのみファイルに書き込みます。したがって、ファイルが変更されていない場合、タイムスタンプは保持されます。
sed
の偽の-i よりも多くはありません。オンディスクバッファの読み取り/書き込みを行います。w / ex -r
とpreserve
コマンドを参照してください。
preserve
コマンドは何ですか?
非常に素早く、シンプルで汚いpythonの方法:
#!/usr/bin/env python
import sys
with open( sys.argv[1] ) as file:
for line in file:
print line.split("/")[0]
サンプル実行
skolodya@ubuntu:$ chmod +x removeStrings.py
skolodya@ubuntu:$ ./removeStrings.py strings.txt
google.com
unix.stackexchange.com
isuckatunix.com
skolodya@ubuntu:$ cat strings.txt
google.com/funny
unix.stackexchange.com/questions
isuckatunix.com/ireallydo
.com
、それは単に/
行の最初から始まるすべてを削除します。(これは私の意見ではより良いアプローチです!)
.net
場合、他のアプローチでは、ドメインと拡張子の後に来る部分は削除されないため、/
セパレータとして使用する方が安全です。
.com
最初の/
文字以降をすべて削除するのではなく、検索するだけの具体的な理由はありますか?en.wikipedia.org/wiki/Ubuntu
リストに次のようなURLがあった場合はどうなりますか?