2013-01-05 48 views
2

我想使用sed來查找文本文件中字符串的行號。以下代碼完美工作。Sed找到行號限制在一個行號範圍

variable1=$(sed -n '/asdf/ =' $file); 

我遇到的問題是當我嘗試限制搜索範圍的行號。在下面的例子中,我試圖將其限制在第5行到第10行。假設第7行存在「asdf」,我沒有將值設置爲variable2。

variable2=$(sed -n '5,10 /asdf/ =' $file); 

任何人都可以幫助我嗎?

回答

3

下面是如何與awk

$ cat file 
qwer 
asdf 
zxcv 
qwer 
asdf 
zxcv 
qwer 
asdf 
zxcv 

$ awk '/asdf/ && NR>=5 && NR<=10 {print NR}' file 
5 
8 

如果你想停止的第一場比賽剛剛exit後腳本,並使用命令替換存儲在一個變量的值:

$ awk '/asdf/ && NR>=5 && NR<=10 {print NR; exit}' file 
5 

$ var=$(awk '/asdf/ && NR>=5 && NR<=10 {print NR; exit}' file) 

$ echo $var 
5 
+0

你能詳細談談如何把第一個結果(5在你的例子)爲一個變量? ? – rmkilc

+0

@rmkilc請參閱編輯 –

+0

您可以將所有條件放在操作塊之外:'awk'5 <= NR && NR <= 10 &&/asdf/{print NR}'' –

3

您的sed線非常接近。見下文(借用sudo_O的輸入例如:

kent$ echo "qwer 
asdf 
zxcv 
qwer 
asdf 
zxcv 
qwer 
asdf 
zxcv"| sed -n '5,10 {/asdf/=}' 
5 
8 
+0

謝謝!大括號做了訣竅。 – rmkilc

0

這裏是我工作:

variable2=$(sed -n '5,10 {/asdf/=}' $file);