簡體   English   中英

如何使用grep或awk或sed ..根據模式打印值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM