Bu cevap devam eden bir çalışma - susbstitute komutu hakkında daha fazla örneği kaçırıyor
Nedir sed
?
sed
= Akış Editör
GNU sed
4.2.2 raporları için kılavuz sayfasındaki açıklama :
Sed bir akış editörüdür. Bir akış düzenleyicisi, bir giriş akışında (bir dosya veya bir boru hattından giriş) temel metin dönüşümlerini gerçekleştirmek için kullanılır. Bazı şekillerde, komut dosyası düzenlemelerine (ed gibi) izin veren bir düzenleyiciye benzer olsa da, sed giriş (ler) üzerinde yalnızca bir geçiş yaparak çalışır ve sonuç olarak daha verimlidir. Ancak sed'in bir boru hattındaki metni özellikle diğer editör türlerinden ayıran filtreleme yeteneğidir.
İçinde decription GNU sed
gnu.org adresindeki sayfanın raporları:
sed (akış düzenleyici) etkileşimli bir metin düzenleyici değildir. Bunun yerine, metni filtrelemek için kullanılır, yani metin girişi alır, üzerinde bazı işlemler (veya işlemler kümesi) gerçekleştirir ve değiştirilen metni çıktılar. sed genellikle bir dosya içindeki bir dizenin birden çok örneğini desen eşleştirme veya değiştirme ile bir dosyanın bir kısmını çıkarmak için kullanılır.
Ne için sed
kullanılır?
Veri akışlarında karmaşık değişiklikler yapmak için kullanılabilir (genellikle metin, ancak ikili verileri değiştirmek için de kullanılabilir).
En yaygın kullanım durumları arasında şunlar vardır:
- Temel / genişletilmiş normal ifadeler kullanarak metin dosyasından satırları seçici olarak yazdırma / silme
- Temel / genişletilmiş normal ifadeler kullanarak bir metin dosyasındaki dizeleri genel olarak değiştirme
- Temel / genişletilmiş normal ifadeler kullanarak metin dosyasındaki dizeleri seçici olarak değiştirme
Bunlar bu cevapta ele alınan kullanım durumlarıdır.
kullanım
sed
çağrılması sırasında komut satırı bağımsız değişkenlerinde bir dosya adı belirtilmişse veya dosya adı belirtilmemişse, dosya sisteminde depolanan bir dosyadan girdiyi okur stdin
.
Dosya sisteminde saklanan bir dosyayı kullanarak en az çağrı:
sed '' file
Kullanarak en az çağrı stdin
:
# herestring
<<<'Hello, World!' sed ''
# heredoc
<<'EOF' sed ''
heredoc> Hello, World!
heredoc> EOF
# file
<'file' sed ''
# pipe
echo 'Hello, World!' | sed ''
Selam Dünya!
sed
varsayılan olarak girdi dosyasını satır satır okur; bir satır okur, satırın son satırını kaldırır ve işlenen satırı bir "desen alanına" koyar; son olarak, desen alanının geçerli içeriği üzerinde listelenen komutları yürütür ve giriş dosyasından yeni bir satır okur.
Herhangi bir komut belirtilmediğinde veya a p
veya bir d
komut belirtildiğinde *, sed
her zaman yineleme sırasında desen alanının geçerli içeriğini ve ardından her yinelemede bir yeni satır yazdırır:
user@debian ~ % sed '' file
Hello, world! # no command but the lines are printed
user@debian ~ % sed 'p' file
Hello, World!
Hello, World! # the p command prints the lines already printed
user@debian ~ % sed 'd' file
user@debian ~ % # the d command deletes the lines that would be printed
Bunu önlemek sed
için -n
anahtarla birlikte çağrılabilir :
user@debian ~ % sed -n '' file
user@debian ~ % sed -n 'p' file
Hello, World!
user@debian ~ % sed -n 'd' file
user@debian ~ %
* Yalnızca konuşan p
, d
ve s
bu cevap kaplı komutlarıdır komutları.
Hat seçimi
sed
giriş dosyasının tamamını işleyebilir veya yalnızca giriş dosyasının seçilen satırlarını işleyebilir; işlenecek girdi dosyasının satırlarının seçimi "adresler" belirtilerek yapılır; bir adres (diğer şeylerin yanı sıra) bir satır numarası veya bir desen olabilir; satır aralıkları adres aralıkları belirlenerek seçilebilir.
Muhtemel adres kombinasyonları:
<N>
( <N>
bir sayı nerede ): aşağıdaki komut / komutlar yalnızca satır numarasında yürütülür<N>
;
<N>,<M>
(burada <N>
ve <M>
iki rakam, edilir <N>
> <M>
): Aşağıdaki komut / komutları satır numarası arasında değişen hatlarında çalıştırılacak <N>
satır numarası için <M>
ieçren;
/<pattern>/
(burada <pattern>
temel veya genişletilmiş bir normal ifade bulunur): Aşağıdaki komut / komutlar yalnızca aşağıdakileri içeren satırlarda yürütülür <pattern>
;
/<pattern1>/,/<pattern2>/
(burada <pattern1>
ve <pattern2>
normal ifadeler, bazik ya da uzatılır): Aşağıdaki komut / komutları bir oluşumunu içeren birinci çizgi arasında değişen hatlarında çalıştırılacak <pattern1>
bir oluşumunu içeren bir sonraki satıra <pattern2>
çoklu durumda birden fazla kez, sipariş <pattern1>
-<pattern2>
oluşumları;
<N>,/pattern/
(burada <N>
bir sayıdır ve <pattern>
temel veya genişletilmiş normal bir ifadedir): satır numarasından <N>
ilk satırına kadar olan satırlarda aşağıdaki komut / komutlar yürütülür <pattern>
;
/pattern/,<N>
(burada <pattern>
temel veya genişletilmiş bir normal ifade ve <N>
bir sayıdır): aşağıdaki komut / komutlar, meydana geldiği ilk satırdan <pattern>
satır numarasına kadar olan satırlarda yürütülür <N>
;
Satır aralıklarında ikameleri yazdırmak, silmek veya yerine getirmek için yapılan seçim her zaman belirtilen adreslerle eşleşen satırları içerecektir; ayrıca, desenleri kullanarak satır aralıkları üzerinde baskı, silme veya yerine koyma yapmak için yapılan seçim tembel ve globaldir (yani, etkilenen her aralık her zaman mümkün olan en küçük olacaktır ve çoklu aralıklar etkilenecektir).
Satır aralıklarını yazdırırken veya yalnızca üzerinde değişiklik yapılan satırları yazdırırken sed
,-n
, ölçütle eşleşen satırların iki kez yazdırılmasını önlemek anahtarla gerekir (bu yalnızca satır aralıklarını yazdırırken olur) ve sırayla ölçütle uyuşmayan satırların ne olursa olsun yazdırılmasını önlemek için.
İşlenecek satır seçiminin ardından bir komut veya parantez kullanılarak gruplandırılmış noktalı virgülle ayrılmış birden çok komut gelmelidir.
Komutlar: yazdırma, silme
Bir seçimi yazdırmak veya silmek için kullanılan komutlar sırasıyla:
p
: belirtilen adres / adres aralığıyla eşleşen satırları yazdırır;
d
: belirtilen adres / adres aralığıyla eşleşen satırları siler;
Bu komutlardan biri olmadığında bir adres / seçimi öncesinde, komut girişi dosyasının her satırında yani küresel yürütülür.
Örnekler: yazdırma, silme
Sayısal adresleri belirten satırları yazdırma / silme:
Örnek dosya:
line1
line2
line3
line4
line5
sed -n '<N>p' file
user@debian ~ % sed -n '3p' file
line3
sed '<N>d' file
user@debian ~ % sed '3d' file
line1
line2
line4
line5
- Çizgi yazdırma
<N>
için <M>
kapsayıcı:
sed -n '<N>,<M>p' file
user@debian ~ % sed -n '2,4p' file
line2
line3
line4
- Çizgi silme
<N>
için <M>
kapsayıcı:
sed '<N>,<M>d' file
user@debian ~ % sed '2,4d' file
line1
line5
Desen belirten satırları yazdırma / silme:
Örnek dosya:
First line
Start printing / deleting here
Random line
Random line
Random line
Stop printing / deleting here
Last line
- Eşleşen baskı hatları
<pattern>
:
sed -n '/<pattern>/p' file
user@debian ~ % sed -n '/print/p' file
Start printing / deleting here
Stop printing / deleting here
- Eşleşen satırları silme
<pattern>
:
sed '/<pattern>/d' file
user@debian ~ % sed '/print/d' file
First line
Random line
Random line
Random line
Last line
- Çizgiyi
<pattern1>
, çizgiyle eşleşen çizgiye <pattern2>
dahil yazdırma :
sed -n '/<pattern1>/,/<pattern2>/p' file
user@debian ~ % sed -n '/Start/,/Stop/p' file
Start printing / deleting here
Random line
Random line
Random line
Stop printing / deleting here
- Satır eşleme
<pattern1>
ile satır eşleme <pattern2>
dahil satırları silme :
sed '/<pattern1>/,/<pattern2>/d' file
user@debian ~ % sed '/Start/,/Stop/d' file
First line
Last line
Komut: yedek
Bir seçimde değişiklik yapmak için kullanılan komut:
s
: belirtilen adres / adres aralığıyla eşleşen satırların yerine geçer;
Bu komut olduğunda değil bir adres / seçimi öncesinde, komut girişi dosyasının her satırında yani küresel yürütülür.
s
Komutun sözdizimi :
s/<pattern>/<replacement_string>/<pattern_flags>
Eğik çizgiler "sınırlayıcılardır"; bunlar sınırlandırmak için kullanılırlar <pattern>
, <replacement_string>
ve <pattern_flags>
bölümler;
Sınırlayıcı her zaman s
komutun hemen ardından gelen karakterdir ; başka bir karaktere ayarlanabilir, örneğin |
:
s|<pattern>|<replacement_string>|<pattern_flags>
<pattern>
bir temel veya genişletilmiş düzenli ifadedir; özel bir anlamı <replacement_string>
olan sed
-özel dizileri içerebilen sabit bir dizgidir ; <pattern_flags>
, davranışını değiştiren bayrakların listesidir <pattern>
.
sed
Özel bir anlamı olan en yaygın -özel diziler:
&
: backreference, ile eşleşen dize ile değiştirilir <pattern>
;
\<N>
( <N>
bir sayı nerede ): geri başvuru, <N>
yakalanan grupla değiştirilir <pattern>
;
En yaygın bayraklar:
g
: <pattern>
küresel olarak eşleşmeye zorlar , yani her satırda birden çok kez;
i
: büyük / <pattern>
küçük harfe duyarsız şekilde uymaya zorlar ;
p
: üzerinde bir kez daha -n
değişiklik sed
yapılan satırları yazdırır (yalnızca bir yerine koyma yapılan satırları yazdırmak için anahtarın çağrılması sırasında anahtar kullanıldığında yararlıdır );
Örnekler: ikame
Örnek dosya:
A-well-a everybody's heard about the bird
B-b-b-bird, bird, bird, b-bird's the word
A-well-a bird, bird, bird, the bird is the word
A-well-a bird, bird, bird, well the bird is the word
A-well-a bird, bird, bird, b-bird's the word
A-well-a bird, bird, bird, well the bird is the word
A-well-a bird, bird, b-bird's the word
A-well-a bird, bird, bird, b-bird's the word
A-well-a bird, bird, bird, well the bird is the word
A-well-a bird, bird, b-bird's the word
A-well-a don't you know about the bird?
Well, everybody knows that the bird is the word!
A-well-a bird, bird, b-bird's the word
A-well-a...
- İlk oluşumunu değiştirilmesi
<pattern>
ile <replacement_string>
her satırda:
sed 's/<pattern>/<replacement_string>/' file
user@debian ~ % sed 's/bird/birds/' file
A-well-a everybody's heard about the birds
B-b-b-birds, bird, bird, b-bird's the word
A-well-a birds, bird, bird, the bird is the word
A-well-a birds, bird, bird, well the bird is the word
A-well-a birds, bird, bird, b-bird's the word
A-well-a birds, bird, bird, well the bird is the word
A-well-a birds, bird, b-bird's the word
A-well-a birds, bird, bird, b-bird's the word
A-well-a birds, bird, bird, well the bird is the word
A-well-a birds, bird, b-bird's the word
A-well-a don't you know about the birds?
Well, everybody knows that the birds is the word!
A-well-a birds, bird, b-bird's the word
- Tüm tekrarlarını değiştirme
<pattern>
ile <replacement_string>
her satırda:
sed 's/<pattern>/<replacement_string>/g' file
user@debian ~ % sed 's/bird/birds/g' file
A-well-a everybody's heard about the birds
B-b-b-birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, the birds is the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a don't you know about the birds?
Well, everybody knows that the birds is the word!
A-well-a birds, birds, b-birds's the word
A-well-a...
- Yalnızca şununla başlayan satırların seçilmesi
<pattern1>
ve aşağıdakilerin tüm oluşumları <pattern2>
ile değiştirilmesi <replacement_string>
:
sed -n '/^<pattern1>/s/<pattern2>/<replacement_string>/pg' file
user@debian ~ % sed -n '/^A/s/bird/birds/pg' file
A-well-a everybody's heard about the birds
A-well-a birds, birds, birds, the birds is the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a don't you know about the birds?
A-well-a birds, birds, b-birds's the word
- Sadece çizgileri ile biten seçilmesi
<pattern1>
ve tüm tekrarlarını değiştirilmesi <pattern2>
ile <replacement_string>
:
sed -n '/<pattern1>$/s/<pattern2>/<replacement_string>/pg' file
user@debian ~ % sed -n '/word$/s/bird/birds/pg' file
B-b-b-birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, the birds is the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a birds, birds, birds, b-birds's the word
A-well-a birds, birds, birds, well the birds is the word
A-well-a birds, birds, b-birds's the word
A-well-a birds, birds, b-birds's the word
Sed is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient. But it is sed's ability to filter text in a pipeline which particularly distinguishes it from other types of editors.