2016-04-06 4 views
-2

awkやsedのようなUnixツールを使ってファイル内の行の番号を変更するにはどうすればよいですか? シェルスクリプトを使用して、私のサンプルファイルの3行目を1-10に変更したいとします。私は数字を認識するために正規表現を使用する必要があると思うが、私はこれを行う方法がわからない、または複数の数字(10のような)を許可する。ループのシェルスクリプト内の与えられた行番号のunix変更番号の値

サンプルファイル:これまでの

/examples/are/hard so/hard/1 

シェルスクリプト:

for i in {1..3}; 
do 
sed 's|/examples/are/hard so/hard/7 | /examples/are/hard so/hard/'"$i" ex_file 
cat ex_file 
done 

所望の出力:

/examples/are/hard so/hard/1 
/examples/are/hard so/hard/2 
/examples/are/hard so/hard/3 
+0

なぜあなたはループを実行していて、どのような出力が得られますか? – anubhava

+0

バッチスクリプトを実行するのにqsubを使用しています。 qsubが各スクリプトで送られるディレクトリ番号を変更したい。この例では、予期した結果は、例のファイルに3の代わりに10を付けたものです。 – kilojoules

+0

私はより具体的な例で更新しました。 – kilojoules

答えて

1

あなたが実行したことは、有効なsedコマンドではありません。置換をしようとしている場合は、s/search/replace/flagsです。

私はあなたが意味するものを想像:私たちは一時的に単一引用符から抜け出す

sed 's/here\/is the number\/to\/change 3/here\/is the number\/to\/change '"$i"'/' ex_file 

注意を。単一引用符の内部では、変数は補間されません。二重引用符をスワップし、$iを入力し、一重引用符に戻ってコマンドを終了します。

P.S.また、don't have toも区切り文字として/を使用してください。

sed 's|here/is the number/to/change 3|here/is the number/to/change '"$i"'|' ex_file 
+0

ありがとう!ハードワイヤード3は、ループの繰り返しごとに番号が変わるため、私のケースでは機能しません。 – kilojoules

+0

はい、そうです。 '$ i'は二重引用符の外側にあるので、' for'繰り返しごとに補間されます。 –

+0

'here \ /は\/to \/change 3'ステートメントハードワイヤー3インチの番号です – kilojoules

関連する問題