テキスト文字列の前のすべての項目を見つけて置き換える

テキスト文字列の前のすべての項目を見つけて置き換える

私は多くのIPアドレスのリスト(主にIPv4、いくつかのIPv6)の後にスペース、ドメイン名、別のスペースがあり、「www」を含む同じドメイン名があります。その前に。各インスタンスは独自の行にあります。リストは次のとおりです(しかし、はるかに大きい):

23.212.109.137 at.ask.com www.at.ask.com
216.58.206.74 maps.googleapis.com www.maps.googleapis.com
2400:cb00:2048:1::6812:32a5 litscape.com www.litscape.com
104.16.244.35 loc.gov www.loc.gov
216.70.104.235 mbu.edu www.mbu.edu

2つの検索と置換コマンドが気になります。各コマンドは、最後のコマンドの後に別のテキストファイルを生成します。

1)最初のコマンドは見つけて置き換える必要があります。すべて「www」の前に。 「http://」を使用すると、2番目のテキストファイルの行が次のように表示されます。

http://www.at.ask.com
http://www.maps.googleapis.com
http://www.litscape.com
http://www.loc.gov
http://www.mbu.edu

2)2番目のコマンドは、「」のすべてのインスタンスを見つけて置き換える必要があります。http://www."を2番目のテキストファイルに追加して、3番目のテキストファイルの行が次のようになります。

at.ask.com
maps.googleapis.com
litscape.com
loc.gov
mbu.edu

ありがとうございます。

答え1

シングルアッ注文する:

awk '{ print $2 > "domains.txt"; print "http://"$3 > "domains_http.txt" }' file

結果:

> cat domains_http.txt 
http://www.at.ask.com
http://www.maps.googleapis.com
http://www.litscape.com
http://www.loc.gov
http://www.mbu.edu

> cat domains.txt 
at.ask.com
maps.googleapis.com
litscape.com
loc.gov
mbu.edu

答え2

2番目は最も簡単です。

$ cut -d ' ' -f 2 file.in

スペースを区切り文字として使用cutし、2番目の列を切り捨てます。

これにより、awk次の2つの作業を簡単に実行できます。

$ awk '{ print $2 }' file.in

これはデフォルトでコマンドと同じことを行いますcut

$ awk '{ print "http://" $3 }' file.in

これは3番目の列を取得し、http://出力する前に前に追加します。

答え3

sedを使用してください:

sed 's#.*\(www.*\)#http://\1#' source_file > dest_file1
sed 's#.*www\.\(.*\)#\1#' dest_file1 > dest_file2

説明する:

最初の要件では、すべての項目をグループ化wwwし、そのグループに属していないすべての項目を置き換えますhttp://。 2番目のファイルは似ていますが、今後もグループ化されています。www.

ご希望の方は参考にしてください注文するこれらのタスクを実行するには、いつでもそのタスクをカスタムコマンドでエイリアスを指定できます。

関連情報