他の人が指摘したように、 grep
sed
、このタスクにはあまり適していません 良いオプションです。または、テキストが適切に整理されている場合は、単純な cut
入力しやすいかもしれません:
echo www.abc.com | cut -d. -f2-
-d.
cut
に伝えます.
を使用するには 区切り文字として。-f2-
cut
に伝えます フィールド 2 を無限大に戻します。
grep の --only-matching
を使用 と \K
grep の --only-matching
でこれを行うことができます フラグ:
echo "www.abc.com" | grep --perl-regexp --only-matching 'www.\K.*'
に短縮できます
echo "www.abc.com" | grep -Po 'www.\K.*'
どちらのコマンドでも生成されます
<ブロック引用>abc.com
grep (GNU grep) 3.3.
echo
の代わりに 、ヒア文字列を使用してコマンドをさらに短縮します:
grep -Po 'www.\K.*' <<< "www.abc.com"
\K
一致した「www.」を本質的に忘れて、一致の開始点をリセットします。 \K
の詳細については、こちらを参照してください .
grep の肯定的な後読みを使用
肯定的な後読みでこれを行うこともできます:
grep -Po '(?<=www.).*' <<< "www.abc.com"
awk のフィールドセパレータ -F
を使用
awk -F 'www.' <<< "www.abc.com" '$2{print $2}'
これは印刷します
<ブロック引用>abc.com
$2{print $2}
part は、定義されている場合、2 番目のフィールドを出力します。これは、複数行入力の場合に、フィールド セパレータを含まない入力行に対して空白行が出力されないようにするために必要です。
grep
で文字列を編集しないでください Unix シェルでは、grep
通常、テキストからいくつかの行を検索または削除するために使用されます。 sed
を使用したい 代わりに:
$ echo www.example.com | sed 's/^[^\.]\+\.//'
example.com
正規表現を効果的に使用するには、正規表現を学ぶ必要があります。
-i
を渡すと、Sed はファイルをその場で編集 (ファイルを変更) することもできます。 引数ですが、間違った sed
を記述すると、データを簡単に失う可能性があることに注意してください コマンドを使用して -i
を使用します
例
あなたのコメントから、あなたは TeX ドキュメントを持っていて、すべての .com ドメイン名の最初の部分を削除したいと思っていると思います。あなたの文書なら test.tex
:
\documentclass{article}
\begin{document}
www.example.com
example.com www.another.domain.com
\end{document}
次に、この sed
で変換できます コマンド (出力をファイルにリダイレクトするか、-i
でその場で編集) ):
$ sed 's/\([a-z0-9-]\+\.\)\(\([a-z0-9-]\+\.\)\+com\)/\2/gi' test.tex
\documentclass{article}
\begin{document}
example.com
example.com another.domain.com
\end{document}
次のことに注意してください:
- ドットが続く許可された記号の一般的なシーケンスは、
[a-z0-9-]\+\.
によって一致します。 - 正規表現でグループを使用しました (その一部は
\(
内にあります) と\)
) で URL の最初と 2 番目の部分を示し、一致した部分全体を 2 番目のグループ (\2
) に置き換えます。 置換パターンで) - ドメインは、少なくとも第 3 レベルの .com ドメインである必要があります (
\+
ごと) 繰り返しは、少なくとも 1 つの一致を意味します) - 検索では大文字と小文字が区別されません (
i
最後にフラグを立てます) - 行ごとにマッチ以上のことができます (
g
最後にフラグを立てます)
grep
を使用してこれを行うことができます 簡単に:
$ echo www.google.com | grep -o '[^.]*\.com'
google.com
echo
の代わりに ファイルを渡さなければなりません。
$ grep -o '[^.]*\.com$' < file
ここでは正規表現 '[^.]*.com' を使用しました。つまり:.
のない単語を見つけてください その中 ([^.]*
)、その後に続く .com
(\.com
で)。 -o
キーは grep
と言っています 見つかった部分のみを表示する必要があります。