grep を使用して単語の先頭を削除するにはどうすればよいですか? 例: 以下を含むファイルがあります。
www.abc.com
その部分だけ欲しい
abc.com
基本的な質問で申し訳ありません。しかし、Linux の経験はありません。
grep
Unix シェルでは文字列を編集しませんgrep
。通常、テキストからいくつかの行を検索または削除するために使用されます。代わりに使用したいsed
:
$ echo www.example.com | sed 's/^[^\.]\+\.//'
example.com
効果的に使用するには、正規表現を学ぶ必要があります。
sed は、引数を渡せば、その場でファイルを編集 (ファイルを変更) することもできますが、間違ったコマンドを書いてフラグを使用すると-i
、データを簡単に失う可能性があることに注意してください。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-]\+\.
\(
し\)
、一致全体をその 2 番目\2
のグループ (置換パターン) に置き換えます。\+
繰り返しは少なくとも 1 つの一致を意味します)i
末尾のフラグ)。g
最後にフラグ)これは、次を使用してgrep
簡単に実行できます。
$ echo www.google.com | grep -o '[^.]*\.com'
google.com
代わりにecho
、ファイルを提供する必要があります。
$ grep -o '[^.]*\.com$' < file
ここでは正規表現 '[^.]*.com' を使用しました。つまり.
、( [^.]*
) のない単語を見つけてください。その後に.com
( \.com
re ) が続きます。-o
キーは、見つかった部分だけを表示する必要grep
があることを示しています。
他の人が指摘しているように、grep
このタスクにはあまり適していないsed
か、良いオプションです。または、テキストが適切に整理されている場合は、シンプルなcut
方が入力しやすいかもしれません:
echo www.abc.com | cut -d. -f2-
-d.
区切り文字としてcut
使用するよう指示します。.
-f2-
cut
フィールド 2 を無限大に戻すように指示します。--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 -Po '(?<=www.).*' <<< "www.abc.com"
-F
awk -F 'www.' <<< "www.abc.com" '$2{print $2}'
これは印刷します
abc.com
$2{print $2}
定義されている場合、パーツは 2 番目のフィールドを出力します。これは、複数行入力の場合に、フィールド セパレータを含まない入力行に対して空白行が出力されないようにするために必要です。
grep
テキストの操作/変更には使用されず、テキスト/テキスト内のパターンの検索にのみ使用されます
コマンドラインツールで実行したい場合は、orsed
のようなものを調べる必要があります。または、Python/Perl/Ruby などでスクリプトを作成します。awk
cut