25 Ocak 2015 Pazar

sed komutu

sed ve execute
Örnekte sed komutu s ile substitude yaptıktan sonra çıktı /e verildiği için çalıştırılıyor.
echo AAA | sed -r 's/A/echo B/ge'
Komut aslında şuna denk
echo AAA | sed -r 's/A/echo B/g' | sh

sed ve delete
sed substitude s/a/b/g şeklinde çalışıyor. Delete ise /a/,/b/d şeklinde çalışıyor. Aradaki virgüle dikkat!

Blokları şeklinde silmek için örnek. History kelimesini içeren ilk satır ile Date kelimesini içeren ilk satır bloğu silinir.
$ sed -i '/History/,/Date/d' file
History kelimesinden sonra gelen 5 satırı silmek için şöyle yapılır

$ find . -print0 -name *.h | xargs -0 sed -i '/History/{N;N;N;N;N;d;}' file

sed ve substitude
substitute ve ayraç
sed komutunda substitude için kullanılan örüntü şu şekilde. s harfinden sonra gelen ilk karakter ayraç (delimeter) olarak algılanıyor. İlk ayraçtan sonra gelen düzenli ifade aranılan şey, ikinci ayraçtan sonra gelen kelime ise yer değiştirmesi istenen değer. Ayraç olarak aranan ifade içinde olmayan herhangi bir karakter kullanılabilir.
Ayraç olarak pipe kullanımı
sed -i "s|$line|$line_new|g" /etc/myconfig
Ayraç olarak yüzde karakterinin kullanımı
sed -i "s%$line_old%$line_new%g" /etc/myconfig
Ayraç olarak diyez kullanımı
sed -i "s#DONEDIRECTORY#$DoneDirectory#" *TestFile*
substitude - yer değiştirme amaçlı
Basit bir örnek
test kelimesini real ile değiştirme
find . - name "*.cpp" | xargs sed -i "s/test/real"
substitude - silme amaçlı
Satırdaki tüm eşleşmeleri silmek
Örnek:
Aranan şey 3 veya 4'ü takip eden : karakteri ile başlayan bir kelime.
\b ile word boundary ile başlaması sağlanır \S ile non-space ile devam etmesi ve daha sonra \s ile boşluk ile devam etmesi sağlanır. Eşleşme sağlayan bir örnek 3:11 olabilir.
sed 's/\b[34]:\S*\s*//g' file
Satırdaki Belirli Bir Eşleşmeyi Silmek
İkinci virgülü silmek için örnek: g2 ile her satırdaki ikinci eşleşme belirtilir.
$ sed 's/,//g2' file

Hiç yorum yok:

Yorum Gönder