Sed nedir ve ne için kullanılır?


20

sedSon zamanlarda çok görüyorum ve oldukça kafa karıştırıcı bir komut olduğunu düşünüyorum. Manajlar özellikle yardımcı olmadı, ancak diğer komutların çıktılarını ayrıştırmak için kullanılabileceğini biliyorum.

Tam olarak nedir sedve ne kullanır? Ne sedolduğunu, yaygın olarak ne için kullanıldığını ve bazı temel örnekleri / sözdizimini kapsayan kapsamlı bir cevap arıyorum .


3
Sed man sayfasından: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.
saji89

Kapsamlı bir cevap başlatmak için iyi bir yer olmalı: en.wikipedia.org/wiki/Sed
saji89

1
info seddaha çok şey var man sed. Sonra, /usr/share/doc/sedorada, var sedfaq.txt.gz.

Yanıtlar:


20

Temel kullanımda 'arama ve değiştirme' dizeleri ile kullanılır.

echo "The quick brown fox jumps over the lazy dog" | sed 's/dog/cat/'

İadeler

"The quick brown fox jumps over the lazy cat"

Sed, düzenli ifadeler kullanıldığında gerçekten parlıyor.

Hakkında oldukça kapsamlı olan bu makaleye göz atmak isteyebilirsiniz sed.


5

Tanımlar

Unix System V: pratik bir rehber , Mark Sobell'in kitabı:

Sed yardımcı programı bir toplu (etkileşimli olmayan) düzenleyicidir. Sed komutları genellikle bir komut dosyasında saklanır. . .alk komut satırından basit sed komutları verebilirsiniz. . .

Sed için man sayfası (GNU sed) 4.2.2:

Sed bir akış editörüdür. Bir akış düzenleyicisi, bir giriş akışında (bir dosya veya bir boru hattından gelen giriş) temel metin dönüşümlerini oluşturmak için kullanılır.

Resmi olmayan tanımım:

Sed( akış düzenleyicinin kısaltması ), metnin her seferinde bir satır işlendiği sırada geliştirilmiş, ancak en güçlü Unix / Linux yardımcı programlarından biri olmaya devam eden bir metin işleme yardımcı programıdır; aynı zamanda, özellikle metin işlemek için tasarlanmış bir betik dilidir.

Kullanımları

Tanımların önerdiği gibi, sedmetnin, metin dosyalarının ve borulu metin akışlarının toplu işlenmesi için kullanılır. Çoğu zaman metni değiştirmek ve silmek için kullanılır:

echo "stackexchange" | sed 's/stackexchange/askubuntu/'

Ancak, diğer komutların davranışlarını taklit etmek için de kullanılabilir.

  • taklit dmesg | head -n 3(ilk 3 satır baskı), biz yapabiliriz dmesg | sed -n 1,3p.
  • taklit etmek dmesg | grep 'wlan0'(dize aramak) yapabilirizdmesg | sed -n '/wlan0/p'
  • Liste öğesi

sedDiğer metin işleme yardımcı programlarına göre en büyük avantaj -ibayraktır, yani düzenlenmiş metni ekrana çıktılamakla kalmaz, aynı zamanda düzenlemeyi orijinal dosyaya kaydederiz. awkaksine, tatlar sadece GNU awkversiyonda böyle bir özelliğe sahiptir .

sednoktalı virgül ( ;) ile ayrılmış birden çok şablonla veya -fişaretlemeden sonra belirtilen bir komut dosyasından komut satırında girdi alabilir , ör.cat someTextfile.txt | sed -f myScript.sed

Sed uygulamaları ve örnekler



1

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 sed4.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 sedgnu.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 sedkullanı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!

sedvarsayı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 pveya bir dkomut belirtildiğinde *, sedher 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 sediçin -nanahtarla 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, dve sbu cevap kaplı komutlarıdır komutları.

Hat seçimi

sedgiriş 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
  • Baskı hattı <N>:
sed -n '<N>p' file
user@debian ~ % sed -n '3p' file
line3
  • Satır siliniyor <N>:
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.

sKomutun 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 skomutun 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 -ndeğişiklik sedyapı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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.