おぼえがき
おぼえがき
sed n番目のパターンだけ置換
sed n番目のパターンだけ置換
ファイル
1>------2>------3>------4
1>------2>------3>------4
1>------2>------3>------4
1>------2>------3>------4
1>------2>------3>------4
1>------2>------3>------4
1>------2>------3>------4
1>------2>------3>------4
1>------2>------3>------4
1>------2>------3>------4
1>------2>------3>------4
上記のファイルに対して、
sed -e "s/¥t/|/2" ${ファイル名}
ってやると、
1>------2|3>----4
1>------2|3>----4
1>------2|3>----4
1>------2|3>----4
1>------2|3>----4
1>------2|3>----4
1>------2|3>----4
1>------2|3>----4
1>------2|3>----4
1>------2|3>----4
1>------2|3>----4
2番目にマッチしたものだけが置換される。
ファイル
1>------2>------3>------4
1>------2>------3>------4
1>------2>------3>------4
1>------2>------3>------4
1>------2>------3>------4
1>------2>------3>------4
1>------2>------3>------4
1>------2>------3>------4
1>------2>------3>------4
1>------2>------3>------4
1>------2>------3>------4
上記のファイルに対して、
sed -e "s/¥t/|/2" ${ファイル名}
ってやると、
1>------2|3>----4
1>------2|3>----4
1>------2|3>----4
1>------2|3>----4
1>------2|3>----4
1>------2|3>----4
1>------2|3>----4
1>------2|3>----4
1>------2|3>----4
1>------2|3>----4
1>------2|3>----4
2番目にマッチしたものだけが置換される。
コメント ( 0 )
sed 指定範囲の中を置換
sed 指定範囲の中を置換
phpのファイルがある。
それにたいして、
コメントで囲われた範囲を置換してみる
sed -e '/¥/¥*¥*/,/¥*¥//{s/return/AAA/}' ${ファイル名}
phpのファイルがある。
それにたいして、
コメントで囲われた範囲を置換してみる
sed -e '/¥/¥*¥*/,/¥*¥//{s/return/AAA/}' ${ファイル名}
コメント ( 0 )
awk 正規表現で絞込みの速度
time awk -F" " '/正規表現/ {print $1,$5}' ${ファイル}
real 0m13.641s
user 0m13.528s
sys 0m0.127s
time awk -F" " '{print $1,$5}' ${ファイル} | grep '正規表現'
real 0m2.331s
user 0m3.505s
sys 0m0.208s
んーーー。
処理速度がぜんぜん違う。
前者のほうが、個人的には良いんだけど、この速度差を考えると、
後者だなぁ。
何でだろう。。。
って思ってたけど、
time awk -F" " 'match($5,/正規表現/) {print $1}' ${ファイル}
real 0m2.101s
user 0m1.971s
sys 0m0.136s
おおーー速くなった。
awkの組み込み関数のmatchを使えば、指定したフィールドに対して正規表現をかけて、取得したいカラムをprintできる。
こりゃ良い。
たぶん、一番初めに書いたやり方は、一行全てを正規表現に引っ掛けてるんだろう。
real 0m13.641s
user 0m13.528s
sys 0m0.127s
time awk -F" " '{print $1,$5}' ${ファイル} | grep '正規表現'
real 0m2.331s
user 0m3.505s
sys 0m0.208s
んーーー。
処理速度がぜんぜん違う。
前者のほうが、個人的には良いんだけど、この速度差を考えると、
後者だなぁ。
何でだろう。。。
って思ってたけど、
time awk -F" " 'match($5,/正規表現/) {print $1}' ${ファイル}
real 0m2.101s
user 0m1.971s
sys 0m0.136s
おおーー速くなった。
awkの組み込み関数のmatchを使えば、指定したフィールドに対して正規表現をかけて、取得したいカラムをprintできる。
こりゃ良い。
たぶん、一番初めに書いたやり方は、一行全てを正規表現に引っ掛けてるんだろう。
コメント ( 0 )
sed の一時ファイル
ファイル
a
b
c
d
ってファイルがあってさ、
bをXに変えたいと気って
sed -e "s/b/X/g" ${ファイル} > ${ファイル.tmp};
mv ${ファイル.tmp} ${ファイル}
って感じでやってたんだけど、
実は、
sed -i -e "s/b/X/g" ${ファイル}
で、いけるらしぃ
ふーん
a
b
c
d
ってファイルがあってさ、
bをXに変えたいと気って
sed -e "s/b/X/g" ${ファイル} > ${ファイル.tmp};
mv ${ファイル.tmp} ${ファイル}
って感じでやってたんだけど、
実は、
sed -i -e "s/b/X/g" ${ファイル}
で、いけるらしぃ
ふーん
コメント ( 0 )
次ページ » |