Bunlar, kuşkusuz şifreli sed
komutlardır. Özellikle (kimden man sed
):
: label
b ve t komutları için etiket .
t label
Eğer ///, son giriş satırı okunduğundan ve son t veya T komutundan bu yana başarılı bir değişiklik yaptıysa, etiketlemek için dallayın; etiket atlanırsa, komut dosyasının sonuna dallanır.
n N Bir sonraki girdi satırını desen alanına okur / ekler.
Böylece, yayınladığınız komut dosyası bölünebilir (okunabilirlik için eklenen alanlar):
sed ':a; $!N; s/\n/string/; ta'
--- ---- ------------- --
| | | |--> go back (`t`) to `a`
| | |-------------> substitute newlines with `string`
| |----------------------> If this is not the last line (`$!`), append the
| next line to the pattern space.
|----------------------------> Create the label `a`.
Temel olarak, bunun yaptığı şey sahte kodda şu şekilde yazılabilir:
while (not end of line){
append current line to this one and replace \n with 'string'
}
Daha karmaşık bir giriş örneği ile bunu biraz daha iyi anlayabilirsiniz:
$ printf "line1\nline2\nline3\nline4\nline5\n" | sed ':a;$!N;s/\n/string/;ta'
line1stringline2stringline3stringline4stringline5
Neden !$
gerekli olduğundan gerçekten emin değilim . Anlayabildiğim kadarıyla, aynı çıktıyı
printf "line1\nline2\nline3\nline4\nline5\n" | sed ':a;N;s/\n/string/;ta'