我需要一個正則運算式來從文本檔案中復制域名。在文本檔案中,域看起來像
site.com - org name - title
site.net - other name - another title
HTTP://target.ca - ca site - ca title
從這個文本檔案中我需要
site.com
site.net
target.ca
我嘗試sed 's/\.com\/.*/.com/' file.txt了,但這個命令只給了我 .com 域,但我需要所有的域名。請幫幫我。
謝謝你。
uj5u.com熱心網友回復:
第一種解決方案:使用您顯示的示例,請嘗試以下awk代碼。簡單的解釋是,將/所有行的欄位分隔符設定為空格或在程式的主塊中awk檢查行是否以HTTP:然后列印第三個欄位開頭,否則列印第一個欄位以根據要求獲取所需的值。
awk -F' |/' '/^HTTP:/{print $3;next} {print $1}' Input_file
第二種解決方案:使用sed請嘗試以下代碼。使用-E選項-E來啟用 ERE(擴展正則運算式)并在sed此處捕獲組功能。這是代碼中使用的正則運算式的在線演示。sed
sed -E 's/^(HTTP:\/\/)?([^[:space:]] ).*$/\2/' Input_file
第三種解決方案:在這里使用 GNUgrep及其\K選項,它允許我們使用正則運算式匹配事物并在列印時忘記/忽略它們。這是中使用的正則運算式的在線演示grep。
grep -oP '^(HTTP:\/\/)?\K([^[:space:]] )' Input_file
uj5u.com熱心網友回復:
我會sed按照以下方式利用 GNU 來完成這項任務,讓file.txt內容成為
site.com - org name - title
site.net - other name - another title
HTTP://target.ca - ca site - ca title
然后
sed -e 's|^http://||i' -e 's|[[:space:]].*||' file.txt
給出輸出
site.com
site.net
target.ca
說明:我通知 GNUsed應用兩個更改,第一個是將http://行首 ( ^) 替換為不區分大小寫的空行 ( i),第二個是將第一個空白字符及其之后的所有內容替換為空字串。請注意我|用作分隔符,因此我不需要轉義/字符。
(在 GNU sed 4.2.2 中測驗)(在
uj5u.com熱心網友回復:
另一個簡單的awk解決方案:
awk '{sub(/^HTTP:\/\//, ""); print $1}' file
site.com
site.net
target.ca
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/517858.html
標籤:Unixawksed
上一篇:為什么多個讀取命令給我錯誤
