GNU/Linux >> Linux の 問題 >  >> Linux

grepを使用して単語の接頭辞を削除するには?

他の人が指摘したように、 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 と言っています 見つかった部分のみを表示する必要があります。


Linux
  1. 「猫」の出力で単語を強調表示する方法は??

  2. Linux で GREP を使用して特定のテキストを検索する方法

  3. Debian:dpkg を使用して DEB パッケージをインストールまたは削除する方法

  1. Linux で tmpreaper を使用して N 日以上経過したファイルを削除する方法

  2. sed を使用して非 ASCII 文字を削除する方法

  3. ファイル内で \n を grep する方法

  1. javaを使用している実行中のプロセスを特定するにはどうすればよいですか?

  2. grep と awk の使用

  3. rm を使わずにファイルを削除するには?