7
次のシーケンスの最後の行をシェルスクリプトとGNUの実装に置き換えたいとしましょうsed
:
$ seq 20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ステップ1:次のようなシーケンスの最後の行番号を取得します。これとそれを見てください:
$ lastLine=`seq 20|sed -n '$='`
$ echo $lastLine
20
ステップ2:編集する行数(シーケンスの最後)を設定します。
$ numberOfLines=7
$ echo $numberOfLines
7
手順3:次のように、以前の変数に基づいてスタートラインを計算します。これを見てください:
$ startLine=`expr $lastLine - $numberOfLines + 1`
$ echo $startLine
14
ステップ4:これで、シーケンスの最後の7行を次のような別のものに置き換えることができます。これを見てください:
$ seq 20|sed -e "$startLine,+$numberOfLines{s/[12]/WoW/}"
1
2
3
4
5
6
7
8
9
10
11
12
13
WoW4
WoW5
WoW6
WoW7
WoW8
WoW9
WoW0
ステップ4では、sedのmanページのセクション4.4を使用しています。
'ADDR1,+N'
Matches ADDR1 and the N lines following ADDR1.
ステップ4でも、ここで述べたように二重引用符を使用しています。
さて、次のような五湖の答えを使えば、4つのステップは不要です。
$ seq 20 |tac|sed -e '1,7{s/[12]/WoW/}'|tac
1
2
3
4
5
6
7
8
9
10
11
12
13
WoW4
WoW5
WoW6
WoW7
WoW8
WoW9
WoW0
sed '24,$s/,/:/g' filename
がどこに24
あるかを使用する`