[英]How to print the next word after a found pattern with grep,sed and awk?
[英]how to use grep, or awk, or sed.. to print the values based on pattern?
輸入文件在下面,
192.168.2.4,21 / tcp // ftp ///,23 / tcp // ssh ///
192.168.2.5,53 / tcp // dns ///,80 / tcp // http ///
當我將“ ftp”作為參數時,輸出應為
192.168.2.4,21 / tcp // ftp ///
把“ FTP SSH”,輸出應該是
192.168.2.4,21 / tcp // ftp ///,23 / tcp // ssh ///
到目前為止,我在awk grep egrep上進行了嘗試,但結果不合適。
grep:我嘗試了grep -o -e“ pattern1” -e“ pattern2”此方法只會打印出麻煩的換行符來匹配值。
awk:我試圖用“,”將行拆分為列,對於column2到行尾,僅打印匹配的值。 (只是一個主意,無法在線找到任何示例)
謝謝!
這段代碼可以實現您想要的,盡管它不是很優雅:
grep -e "ftp" /folder/log | sed 's/ftp\/\/\/.*/ftp\/\/\//'
grep -e "ftp" /folder/log | grep -e "ssh" | sed 's/ssh\/\/\/.*/ssh\/\/\//'
該代碼假定該模式后的三個正斜杠(///)作為分隔符,因此,只要您的模式始終后跟///,它就可以正常工作。 該代碼還假定第二個模式將始終在該行的第一個模式之后列出(例如:在這種情況下,您希望ftp總是比ssh優先出現在該行上)。
你可以用cut
嗎? -
grep "ftp" /your/file | cut -d, -f1-2
將以下腳本保存在文件中,並使用進行調用:
awk -v re="http|ssh" -f script input
腳本:
BEGIN{
FS=","
}
{
printf "%s", $1;
for( i=2; i<=NF; i++ )
if ($i ~ re)
printf ",%s",$i;
printf "\n"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.