テキストファイルにURLのリストがあるとします。
google.com/funny
unix.stackexchange.com/questions
isuckatunix.com/ireallydo
「.com」以降のすべてを削除したい。
予期された結果:
google.com
unix.stackexchange.com
isuckatunix.com
私は試した
sed 's/.com*//' file.txt
削除されました.com
同様に。
「.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
を追加し、期待どおりの出力を提供します。
とても速くてシンプルで汚い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