2

sed を使用して、テキスト ファイル内の文字列の行番号を見つけようとしています。次のコードは完全に機能します。

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

私が抱えている問題は、検索を行番号の範囲に制限しようとするときです。以下の例では、5 行目から 10 行目に制限しようとしています。「asdf」が 7 行目に存在するとします。variable2 に値が設定されていません。

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

誰でも私を助けることができますか?

4

3 に答える 3

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
于 2013-01-05T19:58:36.573 に答える
3

あなたのsedラインは非常に近いです。以下を参照してください(sudo_Oの入力例を借りました:

kent$  echo "qwer
asdf
zxcv
qwer
asdf
zxcv
qwer
asdf
zxcv"| sed -n '5,10 {/asdf/=}'  
5
8
于 2013-01-05T20:07:30.867 に答える
0

これが私のために働いたものです:

variable2=$(sed -n '5,10 {/asdf/=}' $file);
于 2013-01-07T23:10:54.947 に答える