2017-03-12 8 views
0

sedを使って新しいファイルにコピーしたい行番号を入力するようにユーザに要求する方法を見つけようとしましたが、管理できません。 私はそれを1行または1行にすることができますが、ユーザーが選択した複数の特定の行が必要です。 これは可能ですか?sedを使ってコピーする行番号を入力するようにユーザに促す

これまでのところ、私は1行でうまくいきました。

read lineNr 
sed -n ""$lineNr""p file1 > file2 

複数行ではどうすればよいですか?

答えて

3

あなたは配列に複数の行番号を読み、sedコマンドにその配列を有効にするパラメータ展開を使用することができます。

read -a arr -p "Enter line numbers: " 
sed -n "${arr[*]/%/p;}" infile 

readコマンドは、アレイarrにスペースで区切られた数字を読み込みます。 2番目のコマンドは、パラメータの拡張を使用して:独自の戻りに

  • "${arr[*]}"1 3 5ようなすべての配列要素を有する単一の文字列を。
  • /%/p;部分が置換である:だから

    $ arr=(1 3 5 7) 
    $ echo "${arr[*]/%/p;}" 
    1p; 3p; 5p; 7p; 
    

:それは効果的に各配列要素へp;を追加し、「各配列要素p;と(/%)何の終わりに交換してください」と言います一連の行番号を入力すると、sedコマンドは対応する行だけを表示します。

ちなみに、lineNr変数名をpから分離する以外に、コマンドの引用符は何もしません。

sed -n "${lineNr}p" 

多分?

関連する問題