İSİM
sed - metni süzmek ve
dönüştürmek için akım
düzenleyici
- sed
- SEÇENEKLER... [BETİK]
[GİRDİ-DOSYASI...]
sed bir akım düzenleyicisidir. Akım
düzenleyicisi girdi akımında (dosya veya boru
hattı girdisi) temel metin dönüşümlerini
gerçekleştirmek için kullanılır.
Bazı yönlerden komut dosyasıyla düzenlemelere
(ed gibi) izin veren bir düzenleyiciye benzese de, sed
girdi(ler) üzerinden yalnızca bir geçiş yaparak
çalışır ve sonuç olarak daha verimlidir.
Ancak, onu diğer düzenleyicilerden özellikle
ayıran, sed’in bir boru hattındaki metni
süzme yeteneğidir.
sed iki veri tamponu tutar: etkin kalıp alanı
ve yardımcı tutma alanı. Her ikisi de
başlangıçta boştur.
sed, her girdi satırında şöyle
bir döngü gerçekleştirerek
çalışır: ilk olarak, sed girdi
akımından bir satır okur, satır sonu karakterini
kaldırıp satırı kalıp alanına
yerleştirir. Ardından komutlar
yürütülür; her komutun kendisiyle
ilişkili bir adresi vardır: adresler bir tür
koşul kodudur ve bir komut yalnızca, koşul
doğrulanırsa yürütülür.
Betiğin sonuna
ulaşıldığında, -n
seçeneği kullanımda değilse, kalıp
alanının içeriği çıktı
akımına yazılır ve
kaldırılmışsa satır sonu karakteri de
satırın sonuna eklenir. Ardından, bir sonraki girdi
satırı için bir sonraki döngü
başlar.
’D’ gibi özel komutlar
kullanılmadıkça, iki döngü
arasında kalıp alanı silinir. Tutma alanındaki
veriler ise döngüler arasında saklanır (verileri
iki tampon arasında taşıyan ’h’,
’H’, ’x’, ’g’, ’G’
komutlarına da bakınız).
- --version
- sed sürüm ve telif hakkı bilgilerini
gösterir ve çıkar.
- --help
- Komut satırını, seçeneklerin kısa
açıklamalarını ve hata bildirim adresini
gösterir ve çıkar.
- -n, --quiet,
--silent
- Öntanımlı olarak, sed betik üzerinden
her döngünün sonunda kalıp
alanını çıktılar (bkz: sed
nasıl çalışır). Bu
seçenekler bu öntanımlı
çıktılamayı devre dışı
bırakır ve sed yalnızca p komutu ile
çıktı üretir.
- --debug
- Girilen sed uygulamasını kurallı
biçimde çıktılayıp işlemin
açıklamasını ekler.
$ echo 1 | sed ’\%1%s21232’
3
$ echo 1 | sed --debug ’\%1%s21232’
SED PROGRAM:
/1/ s/1/3/
INPUT: ’STDIN’ line 1
PATTERN: 1
COMMAND: /1/ s/1/3/
MATCHED REGEX REGISTERS
regex[0] = 0-1 ’1’
PATTERN: 3
END-OF-CYCLE:
3
-
- -e[BETİK],
--expression[=BETİK]
- Girdi işlenirken çalıştırılacak
komut kümesine BETİKteki komutları ekler.
- -f[BETİK],
--file[=BETİK]
- Girdi işlenirken çalıştırılacak
komut kümesine BETİK dosyasındaki
komutları ekler.
- -i[SONEK],
--in-place[=SONEK]
- Bu seçenek, dosyaların yerinde düzenleneceğini
belirtir. GNU sed bunu geçici bir dosya oluşturarak
ve standart çıktı yerine bu dosyaya
çıktı göndererek yapar. Bu, =, a, c, i, l,
p gibi komutlar için geçerlidir. /dev/stdout
özel dosyasıyla birlikte w veya W komutunu
kullanarak standart çıktıya yine de yazabilirsiniz.
Bu seçenek örtük olarak -s
seçeneğini de uygular.
Dosyanın sonuna
ulaşıldığında, geçici dosya,
çıktı dosyasının özgün
adıyla yeniden adlandırılır.
Sağlanmışsa, SONEK, geçici
dosyayı yeniden adlandırmadan önce eski
dosyanın adını değiştirmek ve
böylece yedek bir kopya oluşturmak için
kullanılır.
- Bilgi:
- GNU sed herhangi bir çıktının
gerçekten değişip değişmediğine
bakmaksızın yedekleme dosyasını
oluşturacaktır.
- Şu kural izlenir: SONEK bir * içermiyorsa,
geçerli dosya adının sonuna uzantı olarak
eklenir; SONEK bir veya daha fazla * karakteri içeriyorsa,
her yıldız imi geçerli dosya adıyla
değiştirilir. Bu, bir sonek yerine (veya buna ek olarak)
yedekleme dosyasına bir önek eklemenize ve hatta
özgün dosyaların yedeklerini başka bir dizine
(dizinin mevcut olması koşuluyla) yerleştirmenize
olanak tanır.
SONEK belirtilmemişse yedekleme
yapılmaksızın özgün dosyanın
üzerine yazılır.
-i seçeneği isteğe
bağlı girdi aldığından
ardından başka bir kısa seçenek
gelmemelidir:
- Yedekeme soneki olmaksızın -E -i ile
aynıdır. DOSYA yedeği alınmadan yerinde
düzenlenir.
- --in-place=E seçeneğine eşdeğer olup
DOSYA yedeği olarak DOSYAE oluşturulur.
-n’yi -i ile kullanırken dikkatli
olun: ilki satırların otomatik
çıktılanmasını devre
dışı bırakır ve ikincisi
dosyayı yedeklemeden yerinde değiştirir.
Dikkatsizce kullanıldığında (ve
açık bir p komutu olmadan),
çıktı dosyası boş
olacaktır:
# YANLIŞ KULLANIM: ’DOSYA’ kırpılır.
sed -ni ’s/foo/bar/’ DOSYA
-
- -l[N],
--line-length[=N]
- l komutu için satır sarmalama uzunluğunu
belirler. 0 belirtilirse satırlar asla sarmalanmaz. Hiç
belirtilmezse 70 öntanımlıdır.
- --posix
- GNU sed, POSIX sed’e göre birkaç
eklenti içerir. Taşınabilir betikler yazmayı
basitleştirmek için bu seçenek, ek komutlar da dahil
olmak üzere bu kılavuzun belgelediği tüm
eklentileri devre dışı bırakır.
Çoğu sed uygulaması, POSIX tarafından zorunlu
kılınan sözdiziminin dışındaki
eklentilerin çoğunu kabul eder, ancak bazı eklentiler
(Geribildirim bölümünde açıklanan
N komutunun davranışı gibi) aslında
standardı ihlal eder. Yalnızca standardı ihlal eden
eklentiler devre dışı bırakılmak
istenirse, POSIXLY_CORRECT değişkeni boş
olmayan bir değere ayarlanabilir.
- -b, --binary
- Bu seçenek her platformda mevcuttur, ancak yalnızca
işletim sisteminin metin dosyaları ile ikili dosyalar
arasında bir ayrım yaptığı durumlarda
etkilidir. Böyle bir ayrım
yapıldığında (MS-DOS, Windows,
Cygwin’de olduğu gibi) metin dosyaları bir
satır sonu ve bir satır başı karakteri ile
ayrılmış satırlardan oluşur ve
sed sonlandıran satır başını
görmez. Bu seçenek belirtildiğinde, sed girdi
dosyalarını ikil kipte açar, böylece bu
özel işlemi talep etmez ve satırların bir
satır başı ile bitmesini dikkate alır.
- --follow-symlinks
- Bu seçenek yalnızca sembolik bağları
destekleyen platformlarda kullanılabilir ve yalnızca
-i seçeneği belirtilmişse bir etkiye sahiptir.
Bu durumda, komut satırında belirtilen dosya sembolik
bağ ise, sed bağlantıyı takip edecek ve
bağlantının nihai hedefini düzenleyecektir.
Öntanımlı davranış, sembolik
bağı koparmaktır, böylece
bağlantı hedefi değiştirilmez.
- -E, -r,
--regexp-extended
- Temel düzenli ifadeler yerine genişletilmiş
düzenli ifadeler kullanılır.
Genişletilmiş düzenli ifadeler,
egrep(1)’in kabul ettiği ifadelerdir; genellikle daha
az ters eğik çizgiye sahip oldukları için
bunlar daha okunaklıdır. Tarihsel olarak bu bir GNU
eklentisi idi, ancak -E eklentisi artık POSIX
standardına eklendiğinden
(http://austingroupbugs.net/view.php?id=528) -E
seçeneği yalnızca taşınabilirlik
için kullanılır oldu. GNU sed yıllarca
-E’yi belgelendirilmemiş bir seçenek olarak
kabul etti ve *BSD sed’leri de yıllarca
-E’yi kabul etti, ancak -E kullanan betikler
diğer eski sistemlere taşınamayabilir. Bkz.
Genişletilmiş Düzenli İfadeler
- -s,
--separate
- Öntanımlı olarak, sed komut
satırında belirtilen dosyaları tek bir sürekli
uzun akım olarak kabul eder. Bu GNU sed eklentisi,
kullanıcının bunları ayrı dosyalar
olarak görmesine izin verir: aralık adreslerinin
(’/abc/,/def/’ gibi) birden fazla dosyaya
yayılmasına izin verilmez, satır numaraları
her dosyanın başlangıcına görelidir,
$ her dosyanın son satırını ifade eder
ve R komutları ile çağrılan dosyalar
dosya başlangıcına geri sarılır.
- --sandbox
- Korumalı alan tipinde, e/w/r komutları reddedilir -
bunları içeren betikler
çalıştırılmadan iptal edilir.
Korumalı alan kipi, sed’in yalnızca komut
satırında belirtilen girdi dosyalarında
çalışmasını ve harici betikleri
çalıştıramamasını sağlar.
- -u,
--unbuffered
- Hem girdiyi hem de çıktıyı
mümkün olan en düşük düzeyde
tamponlar. (Bu, özellikle girdi "tail -f" benzeri
komutlardan geliyorsa ve dönüştürülen
çıktının mümkün olan en
kısa sürede görülmesi isteniyorsa
kullanışlıdır.)
- -z, --null-data,
--zero-terminated
- Girdiyi, her satırı, satır sonu yerine boş
karakter (ASCII ’NUL’ karakteri) ile
sonlandırılmış bir satır kümesi
olarak ele alır. Bu seçenek, rastgele dosya
adlarını işlemek için "sort
-z" ve "find -print0" gibi komutlarla
kullanılabilir.
Komut satırında -e, -f,
--expression veya --file seçeneği verilmezse,
komut satırındaki seçenek olmayan ilk girdi
yürütülecek betik dosyası olarak
alınır.
Yukarıdakilerin işlenmesinden sonra herhangi bir
komut satırı girdisi kalırsa, bu girdiler
işlenecek girdi dosyalarının adları olarak
yorumlanır. ’-’ dosya adı, standart girdi
akımını ifade eder. Hiçbir dosya adı
belirtilmemişse standart girdi okunur.
GNU sed aşağıdaki komutları
destekler. Bazıları standart POSIX komutlarıdır,
diğerleri ise GNU eklentisidir.
- a \
metin
- Satırın ardına metini ekler.
- a metin
- Satırın ardına metini ekler (başka bir
sözdizimi).
- b [YAFTA]
- Koşulsuz olarak YAFTAya dallanır. YAFTA
belirtilmemişse sonraki döngü
başlatılır.
- c \
metin
- Seçili satırları, satır sonu karakterlerinin
yerine ters eğik çizgiler yerleştirilmiş metin
ile değiştirir.
- c metin
- Satırları metin ile değiştirir (başka
bir sözdizimi).
- d
- Kalıp alanını silip sonraki
döngüyü başlatır.
- D
- Kalıp alanı satır sonu karakterlerini
içeriyorsa, kalıp alanındaki metni ilk satır
sonu karakterine kadar silip yeni bir girdi satırı
okumaksızın kalıp alanında kalanlarla
döngüyü yeniden başlatır.
Kalıp alanı satır sonu karakteri
içermiyorsa, d komutu kullanılmış gibi yeni
dongüyü normal olarak başlatır.
- e
- Kalıp alanında bulunan komutu yürütüp,
çıktıyı kalıp alanının
üzerine sondaki satır sonu karakteri
olmaksızın yazar.
- e KOMUT
- KOMUT yürütülüp
çıktısı çıktı
akımına gönderilir. KOMUT, ters eğik
çizgi ile bitenler dışında, birden çok
satırda çalışabilir.
- F
- Geçerli girdi dosyasının ismini satır sonu
karakteri ile birlikte çıktıya yazar.
- g
- Kalıp alanının içeriğini tutma
alanının içeriği ile değiştirir.
- G
- Kalıp alanının içeriğine satır
sonu karakterini ekledikten sonra tutma alanının
içeriğini kalıp alanının
içeriğine ekler.
- h
- Tutma alanının içeriğini kalıp
alanının içeriği ile değiştirir.
- H
- Tutma alanının içeriğine satır sonu
karakterini ekledikten sonra kalıp alanının
içeriğini tutma alanının
içeriğine ekler.
- i \
metin
- Satırdan önce metni basar.
- i metin
- Satırdan önce metni basar (başka bir
sözdizimi).
- n
- Otomatik çıktılama devre dışı
değilse kalıp alanını
çıktıladıktan sonra, ne olursa olsun,
kalıp alanını sonraki girdi satırı ile
değiştirir. Hiç girdi satırı
kalmamışsa sed hiçbir komut
yürütmeden çıkar.
- l
- Kalıp alanını belirsizliğe yol açmadan
ekrana basar.
- l
genişlik
- Kalıp alanını genişlik karakterden
keserek belirsizliğe yol açmadan ekrana basar. Bu bir GNU
eklentisidir.
- n
- Otomatik çıktılama devre dışı
değilse kalıp alanını
çıktıladıktan sonra, ne olursa olsun,
kalıp alanını sonraki girdi satırı ile
değiştirir. Hiç girdi satırı
kalmamışsa sed hiçbir komut
yürütmeden çıkar.
- N
- Kalıp alanına satır sonu karakterini ekledikren sonra
sonraki girdi satırını kalıp alanına
ekler. Hiç girdi satırı kalmamışsa
sed hiçbir komut yürütmeden
çıkar.
- p
- Kalıp alanını satır sonu karakterine kadar
çıktılar.
- P
- Kalıp alanını çıktılar.
- q
[ÇIKIŞ-KODU]
- Otomatik çıktılama devre dışı
bırakılmazsa, geçerli kalıp
alanının çıktılanmasının
gerekliliği dışında, daha fazla girdi
işlemeden sed betikten hemen çıkar.
ÇIKIŞ-KODU bir GNU eklentisidir.
- Q
[ÇIKIŞ-KODU]
- q gibidir, farklı olarak kalıp alanının
içeriği çıktılanmaz.
Tıpkı q komutundaki gibi
çağrıcıya bir
çıkış kodu döndürür. Bu
bir GNU eklentisidir.
- r DOSYA
- DOSYAdan okunan metni ekler.
- R DOSYA
- DOSYAdan okunan satırı ekler. Komutun her
çağrısında dosyadan bir satır okunur.
Bu bir GNU eklentisidir.
- s/DÜZİFADE/YENİSİ/[SÇN]
- DÜZİFADE düzenli ifadesini kalıp
alanı ile eşleştirmeye
çalışır. Başarılı olursa,
eşleşen kısım YENİSİ ile
değiştirilir. YENİSİ dizgesi
kalıp uzayının eşleşen
kısmına atıfta bulunmak için &
özel karakterini ve DÜZİFADEde
karşılık gelen eşleşen alt ifadelere
atıfta bulunmak için \1 ile \9
arasındaki özel öncelemler içerebilir.
- t[YAFTA]
- Yalnızca son giriş satırının
okunmasından veya koşullu dallanmanın
alınmasından sonra başarılı bir ikame
olmuşsa, YAFTAya atlanır. YAFTA belirtilmezse,
bir sonraki döngü başlatılır.
- T YAFTA
- Yalnızca son giriş satırının
okunmasından veya koşullu dallanmanın
alınmasından sonra başarılı bir ikame
yoksa, YAFTAya atlanır. YAFTA belirtilmezse, bir
sonraki döngü başlatılır. Bu bir GNU
eklentisidir.
- v
[SÜRÜM]
- Bu komut hiçbir şey yapmaz, ancak GNU sed eklentileri
desteklenmiyorsa veya belirtilen SÜRÜM mevcut
değilse sed başarısız olur.
- w DOSYA
- Geçerli kalıp alanını DOSYAya yazar
- W filename
- Geçerli kalıp alanının ilk
satırını DOSYAya yazar.
- x
- Kalıp ve tutma alanlarının içeriklerini takas
eder.
- y/KAYNAK/HEDEF/
- Kalıp alanındaki karakterlerden KAYNAKta
görünenleri HEDEFteki
karşılıklarına
dönüştürür.
- z
- Kalıp alanını boşaltır.
- #
- Bu karakterden satır sonu karakterine kadar dizge bir yorum olup
yok sayılır.
- { KOMUT ; KOMUT ... }
- Çeşitli komutları tek bir komuta gruplar.
- =
- Geçerli satırın numarasını
(satır sonu karakteri ekleyerek) çıktılar.
- :YAFTA
- Dallanma komutları (b, t, T) için
YAFTA konumunu belirler.
sed komutları adressiz verilebilir, bu durumda komut
tüm girdi satırları için
yürütülür; tek adresle verilmesi durumunda komut
yalnızca bu adresle eşleşen girdi
satırları için yürütülür;
iki adresle verilmesi durumunda durumda ise komut, birinci adresten
başlayıp ikinci adrese kadar devam eden
kapsayıcı satır aralığıyla
eşleşen tüm girdi satırları için
yürütülür.
Adres aralıkları hakkında dikkat edilmesi
gereken üç şey:
1. Sözdizimi ADDR1,ADDR2’dir (yani, adresler
virgülle ayrılır);
2. ADDR1’in eşleştiği satır,
ADDR2 daha önceki bir satırı seçse bile
her zaman kabul edilir;
3. Eğer ADDR2 bir düzenli ifade ise,
ADDR1’in eşleştiği satırla
eşleştirmeye çalışılmaz.
Adresten (veya adres aralığından) önce
veya sonra ! komutu yerleştirilebilir. Bu durumda komut,
yalnızca adres (veya adres aralığı)
eşleşmediğinde
yürütülür.
- NUM
- Yalnızca belirtilen satır NUMarasıyla
eşleşme olur (komut satırında -s
seçeneği belirtilmemişse, dosyalar arasında
eklenerek artan satır NUMarasıyla
eşleşme olur)
- $
- Son satırla eşleşir.
- İLK~ADIM
- İLK satırdan başlayarak her
ADIMıncı satırla eşleşir.
Örneğin, "sed -n 1~2p" komutu girdi
akımındaki tüm tek sayılı
satırları çıktıllayacak,
"2~5" adresi ise ikinciden başlayarak her
beşinci satırla eşleşecektir.
İLK sıfır olabilir; bu durumda sed,
adıma eşitmiş gibi
çalışır. (Bu bir eklentidir.) Örnekler:
$ seq 10 | sed -n ’0~4p’
4
8
$ seq 10 | sed -n ’1~3p’
1
4
7
10
-
Düzenli ifadeli adresler
- /DÜZİFD/
- DÜZİFD düzenli ifadesiyle
eşleşen satırı seçer.
DÜZİFD içinde / karakterleri varsa,
bunlar ters eğik çizgi (\) ile öncelenmelidir.
Aşağıdaki komut, /etc/passwd
dosyasında ’bash’ ile biten
satırları ekrana basar:
sed -n ’/bash$/p’ /etc/passwd
- Boş düzenli ifade ’//’, son
düzenli ifade eşleşmesini tekrarlar (aynı
durum, boş düzenli ifade s komutuna
aktarıldığında da geçerlidir).
Düzenli ifade değiştiricilerinin düzenli ifade
derlenirken değerlendirildiğini, dolayısıyla
bunları boş düzenli ifadeyle birlikte belirtmenin
geçersiz olacağı unutulmamalıdır.
- \cDÜZİFDc
- c herhangi bir karakter olabilir.
Bu aynı zamanda DÜZİFD
düzenli ifadesiyle de eşleşir, ancak /
dışında bir sınırlayıcı
kullanılmasına da izin verir. Bu, özellikle
düzenli ifadenin kendisi çok sayıda eğik
çizgi içeriyorsa
kullanışlıdır. Düzenli ifadenin
kendisi herhangi bir sınırlayıcı karakter
içeriyorsa, her biri bir ters eğik çizgi (\)
ile öncelenmelidir.
Aşağıdaki komutlar
eşdeğerdir. /home/alice/documents/ ile
başlayan satırları ekrana basar:
sed -n ’/^\/home\/alice\/documents\//p’
sed -n ’\%^/home/alice/documents/%p’
sed -n ’\;^/home/alice/documents/;p’
-
- /DÜZİFD/I
\cDÜZİFDcI
- Düzenli ifade eşleştirmesinin I
değiştiricisi, düzenli ifadenin harf
büyüklüğünü önemsemeden
eşleşmesine sebep olan bir GNU eklentisidir.
Çoğu yazılım dilinde, harf
büyüklüğünü önemsemeyen
düzenli ifade eşleşmesi için
küçük harf i kullanılır.
Ancak, sed’de i, yerleştirme komutu
için kullanılır (bkz. yerleştirme
komutu).
Aşağıdaki örnekler
arasındaki farka dikkat edin.
Bu örnekte, /b/I adrestir, I
düzenli ifade değiştiricisidir, d ise silme
komutudur:
$ printf "%s\n" a b c | sed ’/b/Id’
a
c
- Burada, /b/ adrestir, i yerleştirme komutudur.
d yerleştirilen değerdir.
$ printf "%s\n" a b c | sed ’/b/id’
a
d
b
c
-
- /DÜZİFD/M
\%DÜZİFD%M
- M değiştiricisi, düzenli ifadeyi çok
satırlı kipte eşleştirmeye yönlendiren
bir GNU sed eklentisidir. Değiştirici, (normal
davranışa ek olarak) ^’ın satır
sonu karakterinden sonraki boş dizgeyle (sonraki
satırın başıyla) ve $’ın
satır sonu karakterinden önceki boş dizgeyle
eşleşmesine sebep olur. Daima tamponun başı
veya sonuyla eşleşen özel karakter dizilimleri de
(\’ ve \’) vardır. Ek olarak nokta
karakteri, çok satırlı kipte satır sonu
karakteriyle eşleşmez.
Düzenli ifadeli adresler, mevcut kalıp
uzayının içeriği üzerinde
çalışır. Kalıp alanı
değiştirilirse (örneğin s/// komutuyla),
düzenli ifade değiştirilen metin ile
eşleştirilmeye
çalışılır.
Aşağıdaki örnekte, -n ile
otomatik yazdırma devre dışı
bırakılmıştır. s/2/X/ komutu,
’2’ içeren satırları
’X’ ile değiştirir. /[0-9]/p
komutu, satırları rakamlarla eşleştirir ve
yazdırır. İkinci satır /[0-9]/
düzenli ifadesinden önce değiştirildiği
için eşleşmeyecek ve
yazdırılmayacaktır:
$ seq 3 | sed -n ’s/2/X/ ; /[0-9]/p’
1
3
- 0,/DÜZİFD/
- 0,/DÜZİFD/ adres belirtiminde 0
satır numarası kullanılabilir, böylece
sed ilk girdi satırında da
DÜZİFD ile eşleşmeye
çalışır. Başka bir deyişle,
DÜZİFD’nin en baştaki girdi
satırı ile eşleşmesi
dışında 0,/DÜZİFD/
ile 1,/DÜZİFD/ benzerdir.
0,/DÜZİFD/ bunu
aralığın sonu olarak değerlendirir. Halbuki,
1,/DÜZİFD/
aralığın başlangıcı ile
eşleşir. Bu nedenle, aralık düzenli ifadenin
ikinci benzerine kadar genişletilir.
Bunun, 0 adresinin anlamlı olduğu tek yer
oluşuna dikkat edilmelidir; 0. satır yoktur ve
başka bir yolla 0 adresi belirtilen komutlar hata verir.
Aşağıdaki örnekler, adres 1 ve 0
ile başlama arasındaki farkı
göstermektedir:
$ seq 10 | sed -n ’1,/[0-9]/p’
1
2
$ seq 10 | sed -n ’0,/[0-9]/p’
1
-
- ADRES1,
+N
- ADRES1 ve ADRES1’i izleyen N satırla
eşleşir.
- ADRES1,
~N
- ADRES1 ve ADRES1i izleyen satırlardan, satır
numarası N’nin katları olan satırlara
kadar olan satırlarla eşleşir.
s komutu muhtemelen sed içindeki en
önemli komuttur ve birçok farklı seçeneğe
sahiptir. s komutunun sözdizimi:
‘s/DÜZİFD/YENİSİ/SEÇENEKLER’
Temel kavram basittir: s/ komutu, kalıp alanını
belirtilen DÜZİFD düzenli ifadesiyle
eşleştirmeye çalışır;
eşleşme başarılı olursa, kalıp
alanının eşleşen kısmı
YENİSİ ile değiştirilir.
Düzenli ifade sözdizimi ile ilgili
ayrıntılar için bkz: Düzenli ifadeli
adresler
YENİSİ, eşleşmenin
n’inci \...\ kısmına atıfta
bulunan, \n atıfları içerebilir (n,
1’den 9’a kadar bir sayıdır). Ayrıca,
YENİSİ kalıp alanının
eşleşen kısmının tamamına
atıfta bulunan öncelenmemiş & karakterleri
de içerebilir.
Sınırlayıcı / karakterleri,
verilen herhangi bir s komutunda herhangi bir başka tek
karakterle eşli olarak değiştirilebilir. /
karakteri (veya onun yerine kullanılan karakter),
DÜZİFD ve YENİSİ içinde
ancak bir \ karakteri ile öncelenerek
görünebilir.
Son olarak, GNU sed eklentisi olarak, komut, bir ters
eğik çizgi ile öncelenerek L, l, U, u, E
özel karakterlerinden birini içerebilir. Bunların
anlamları:
- \L
- Bir \U veya \E öncelemine rastlayana dek
YENİSİ içeriği
küçük harfe
dönüştürülür.
- \l
- Sonraki karakteri küçük harfe
dönüştürür.
- \U
- Bir \L veya \E öncelemine rastlayana dek
YENİSİ içeriği büyük
harfe dönüştürülür.
- \u
- Sonraki karakteri büyük harfe
dönüştürür.
- \E
- \L veya \U ile başlatılmış harf
dönüşümünü durdurur.
g komutu kullanıldığında, harf
dönüşümü düzenli ifadenin
yinelenen oluşumları arasında aktarılmaz.
Örneğin, aşağıdaki komut kalıp
alanındaki ‘a-b-’ ile
çalıştırıldığında:
‘axxB’ çıktılar. İlk
‘-’
dönüştürülürken
‘\u’ seçeneği ile ‘\1’
numaralı düzenli ifade için YENİSİ
boş olur. b- ise xB’ye
dönüştürülürken kalıp
alanına eklenen x karakteri dönüşümden
etkilenmez.
Diğer yandan, \l ve \u boş bir ikameye
öncülük ediyorsa YENİSİ’nin
kalanını etkiler. Kalıp alanındaki
‘a-b-’ ile:
komutu ’-’ ile ‘X’ (büyük harf) ve
‘b-’ ile ‘Bx’
dönüşümü yapar. Bu davranış
istenmiyorsa, ’\1’den sonra
dönüşümü durduran bir ‘\E’
eklenebilir.
Son dönüşümde \, & veya
satır sonu karakteri yerleştirilmek istenirse, bu
karakterlerin bir \ ile öncelenmiş olmasına dikkat
edilmelidir.
s komutunu şu seçeneklerden
sıfır veya daha fazlası izleyebilir:
- g
- Eşleşen (yalnızca ilkini değil) tüm
DÜZİFD’leri YENİSİ ile
değiştirir.
- N
- Yalnızca Ninci DÜZİFD
YENİSİ ile değiştirilir.
- g ve N
etkileşimi
- POSIX standardı, g ve sayı
değiştiricileri birlikte
kullanıldığında ne olması
gerektiğini belirtmez ve şu anda sed
uygulamaları arasında geniş çapta
üzerinde anlaşmaya varılmış bir
çözüm yoktur. GNU sed için
etkileşim şu şekilde
tanımlanıştır: N’den
önceki eşleşmeleri yoksay ve ardından
N’den itibaren tüm eşleşmeleri
eşleştir ve değiştir.
-
- p
- Dönüşüm yapılmışsa yeni
kalıp alanını çıktılar.
- Bilgi:
- p ve e seçenekleri birlikte belirtildiğinde bu
ikisinin bir birine göre konumu farklı sonuçlar
üretebilir. Genelde, ep (değerlendir ve
çıktıla) istenir fakat diğer
türlüsü de hata ayıklama için
kullanışlıdır. Bu nedenle, GNU
sed’in geçerli sürümü s
komutunun genel seçenekleri etkilerini yalnızca bir kere
gösterirken, özellikle p seçeneğinin
hem e den önce hem de e den sonra
kullanımında kalıp alanını önce
ve sonra değerlendirir. Bu davranış, bu
sürümde böyle belgelenmiş olsa da gelecekte
değişebilir.
-
- w DOSYA
- Dönüşüm yapılmışsa sonucu
belirtilen DOSYA’ya yazar. GNU sed eklentisi olarak,
DOSYA için iki özel değer desteklenmektedir:
sonuçları standart hataya yazan /dev/stderr ve
standart çıktıya yazan /dev/stdout. Bu
seçenek, -i seçeneği
kullanılmadıkça p’ye
eşdeğerdir.
- e
- Bu komut, bir kabuk komutundaki girdiyi kalıp alanına
borulamaya yarar. Dönüşüm
yapılmışsa, kalıp alanında bulunan
komut yürütülür ve kalıp alanı
komutun çıktısına yerleştirilir.
Sondaki satır sonu karakterleri engellenir; boş (NUL)
karakter içeren bir komutun yürütülmesinin
sonuçları tanımsızdır. Bu bir GNU
eklentisidir.
- I, i
- Düzenli ifadenin harf
büyüklüğüne duyarsız
eşleştirilmesini sağlayan I
değiştiricisi bir GNU eklentisidir.
- M, m
- Düzenli ifadenin çok satırlı kipte
eşleştirilmesini sağlayan M
değiştiricisi bir GNU eklentisidir.
Değiştirici, (normal davranışa ek olarak)
^’ın satır sonu karakterinden sonraki
boş dizgeyle (sonraki satırın başıyla)
ve $’ın satır sonu karakterinden önceki
boş dizgeyle eşleşmesine sebep olur. Daima tamponun
başı veya sonuyla eşleşen özel karakter
dizilimleri de (\’ ve \’) vardır. Ek
olarak nokta karakteri, çok satırlı kipte
satır sonu karakteriyle eşleşmez.
Düzenli İfadeler
POSIX.2 Temel Düzenli İfadelerinin desteklenmesini
gerektirse de başarım sorunları nedeniyle bunlar
tamamlanmış değildir. \n dizilimi bir
düzenli ifadede satır sonu karakteri ile
eşleşir, \a, \t ve benzerleri için benzer
eşleşmeler söz konusudur. -E
seçeneği temel düzenli ifadeler yerine
gelişmiş düzenli ifadelerin
kullanılmasını sağlar. Gelişmiş
düzenli ifadeler yıllarca GNU sed tarafından
desteklenmiş ve artık POSIX’e de dahil
edilmiştir.
Temel ve genişletilmiş düzenli ifadeler
arasındaki tek fark, birkaç karakterin
davranışındadır: ’?’,
’+’, yaylı ayraçlar ’()’,
kaşlı ayraçlar ’{}’ ve ’|’.
Temel düzenli ifadelerde, bunların özel karakter olarak
davranması için öncelenmesi gerekirken,
genişletilmiş düzenli ifadelerde kendileri olarak
davranması için öncelenmesi gerekir. ’|’
özeldir, çünkü ’\|’ bir GNU
eklentisi olup standart temel düzenli ifadelerde işlevsel
değildir. Örnekler:
- abc?
- Genişletilmiş düzenli ifadelerde abc\? haline
gelir. abc ile eşleşir.
- c\+
- Genişletilmiş düzenli ifadelerde c+ haline
gelir. Bir veya daha fazla c ile eşleşir.
- a\{3,\}
- Genişletilmiş düzenli ifadelerde a{3,} haline
gelir. Üç veya daha fazla a ile
eşleşir.
- \(abc\)\{2,3\}
- Genişletilmiş düzenli ifadelerde (abc){2,3}
haline gelir. Ya abcabc ya da abcabcabc ile
eşleşir.
- \(abc*\)\1
- Genişletilmiş düzenli ifadelerde (abc*)\1
haline gelir. Geriye atıflar genişletilmiş
düzenli ifadelerde de öncelenir.
- a\|b
- Genişletilmiş düzenli ifadelerde a|b haline
gelir. a veya b ile eşleşir.
ÇIKIŞ DURUMU
Sıfır çıkış durumu
başarıyı betimler. Sıfırdan farklı
bir çıkış kodu ise hata oluştuğunu
gösterir. GNU sed şu çıkış
kodları ile çıkar:
- 0
- İşlem başarılı.
- 1
- Komut veya düzenli ifade geçersiz ya da --posix
seçeneği ile GNU sed eklentisi
kullanılmış.
- 2
- Komut satırında belirtilmiş bir veya daha fazla girdi
dosyası açılamadı (örn, dosya yoktur
veya izinler yetersizdir). Diğer dosyalardan işleme devam
edildi.
- 4
- Çalışma anında bir G/Ç veya ciddi bir
işlem hatası oluştu. GNU sed hemen
çıktı.
Ek olarak, q ve Q komutları
sed’in özel bir çıkış kodu
ile çıkmasını sağlamak için
kullanılabilir:
$ echo | sed ’Q42’ ; echo $?
42
Yazılım hatalarını bildirmek
için: bug-sed (at) gnu.org. Ayrıca, eposta gönderirken
sed --version komutunun çıktısının
da iletiye dahil edilmesi rica olunur.
Jay Fenlason, Tom Lord, Ken Pizzini, Paolo Bonzini, Jim Meyering
ve Assaf Gordon tarafından yazıldı.
Telif hakkı © 2020 Free Software Foundation, Inc.
Lisans GPLv3+: GNU GPL sürüm 3 veya üstü
<http://gnu.org/licenses/gpl.html>
Bu bir özgür yazılımdır:
yazılımı değiştirmek ve
dağıtmakta özgürsünüz.
Yasaların izin verdiği ölçüde
HİÇBİR GARANTİ YOKTUR.
İLGİLİ BELGELER
awk(1), ad(1), grep(1), tr(1),
perlre(1), sed.info, sed hakkında çeşitli
kitaplar, sed SSS (http://sed.sf.net/grabbag/tutorials/sedfaq.txt),
http://sed.sf.net/grabbag/.
GNU sed sayfası: <https://www.gnu.org/software/sed/>.
GNU yazılımları için genel yardım
sayfası: <https://www.gnu.org/gethelp/>.
sed komutu ile ilgili kapsamlı bir kılavuz
Texinfo olarak mevcuttur. info ve sed
yazılımları düzgün bir şekilde
sisteminizde mevcutsa,
komutu ile bu kılavuzu görüntüleyebilirsiniz.
ÇEVİREN
© 2022 Nilgün Belma Bugüner
Bu çeviri özgür yazılımdır:
Yasaların izin verdiği ölçüde
HİÇBİR GARANTİ YOKTUR.
Lütfen, çeviri ile ilgili bildirimde bulunmak veya çeviri
yapmak için https://github.com/TLBP/manpages-tr/issues adresinde
"New Issue" düğmesine tıklayıp yeni
bir konu açınız ve isteğinizi belirtiniz.