CodeGym /Kurslar /Docker SELF /Mətnin sed ilə çevrilməsi

Mətnin sed ilə çevrilməsi

Docker SELF
Səviyyə , Dərs
Mövcuddur

Mətnin sed ilə çevrilməsi

1. sed komandasının sintaksisi

sed nədir?

sed (ingiliscədənStream Editor, yəni axın redaktoru) — mətnin işlənməsi üçün güclü bir utilitdir. Bu, mətn faylları və məlumat axınlarında sətirləri dəyişdirməyə, əlavə etməyə, silməyə və ya transformasiya etməyə imkan verir.

sed-in əsas sehri ondadır ki, o, mətni "yoldan" redaktə edir, orijinal fayla toxunmur (əgər siz özünüz bunu xahiş etməsəniz). Bu, onu məlumatların tez və avtomatik şəkildə çevrilməsi üçün ideal vasitə edir.

Komandanın əsas sintaksisi

sed ilə işləmək üçün əsas formulu götürək:

sed [opsiyalar] 'şablon/hərəkət' fayl

Burada:

  • şablon — axtarış aparılacaq mətn və ya müntəzəm ifadədir.
  • hərəkət — etməyi planlaşdırdığınız əməliyyatdır (məsələn, mətn əvəzlənməsi).
  • fayl — redaktə etmək istədiyiniz sətirləri ehtiva edən mətn faylıdır.

Sadəlik üçün ilk vaxtlar ən populyar hərəkətlərə diqqət edəcəyik: mətn əvəz etməsi (s — "substitute" sözündən) və sətirlərin silinməsi (d — "delete" sözündən).


2. Mətnin dəyişdirilməsi s/köhnə/yeni/

Nümunə 1: Sadə mətn dəyişdirilməsi

Tutaq ki, bizdə example.txt adlı fayl belə bir məzmunla var:

Hello world!
Welcome to Linux.
Linux is awesome.

"Linux" sözünü sed ilə dəyişdirməyə çalışaq:

sed 's/Linux/sed/' example.txt

Nəticə belə olacaq:

Hello world!
Welcome to sed.
sed is awesome.

Vəssalam. "Linux" sözü yalnız hər sətirdə bir dəfə sed ilə dəyişdirilib. Bu standart davranışdır.


Nümunə 2: Qlobal dəyişdirmə

Əgər hər bir sətrdəki bütün girişləri dəyişmək istəyirsinizsə, g (qlobal) bayrağını əlavə edin:

sed 's/Linux/sed/g' example.txt

Əgər bir sətrdə "Linux"-un bir neçə dəfələrlə işarəsi varsa, onların hamısı sed ilə dəyişdiriləcək.


Nümunə 3: Registri nəzərə almadan dəyişdirmə

Registri nəzərə almadan mətnin dəyişdirilməsi üçün I (və ya versiyanızdan asılı olaraq i) bayrağı əlavə edin:

sed 's/linux/sed/gi' example.txt

Bu, "Linux", "LINUX", "LiNuX" və s. dəyişdirəcək.


Nümunə 4: Dəyişiklikləri saxlayaraq dəyişdirmə

Varsayılan olaraq sed sadəcə nəticəni konsolda göstərir və faylı dəyişdirmir. Əgər dəyişiklikləri faylda saxlamaq istəyirsinizsə, -i (in-place) seçimini əlavə edin:

sed -i 's/Linux/sed/g' example.txt

İndi example.txt faylı dəyişikliklərlə yenilənəcək.


3. Sətirlərin silinməsi /şablon/d

Nümunə 1: Şablona uyğun gələn sətirlərin silinməsi

Əgər siz "Linux" sözünü ehtiva edən bütün sətirləri silmək istəyirsinizsə:

sed '/Linux/d' example.txt

Nəticə bu cür olacaq:

Hello world!

Burada "Linux" sözünün keçdiyi sətirlər silindi.


Sətirlərin nömrəyə görə silinməsi

Sətiri nömrəsinə görə silə bilərsiniz. Məsələn, ikinci sətiri silmək üçün bunu istifadə edin:

sed '2d' example.txt

Nəticə:

Hello world!
Linux is awesome.

Birkaç sətirin silinməsi: diapazonu göstərin, məsələn, 2-dən 3-cü sətirə qədər silin:

sed '2,3d' example.txt

4. Regular ifadələrlə işləmək

Burada sed öz gücünü tam göstərir! Şablonlarda mürəkkəb uyğunluqları tapmaq üçün regular ifadələrdən istifadə edə bilərsiniz.

Nümunə 1: Müəyyən şablonla sözlərin əvəzlənməsi

Tutalım, mətn içərisində aşağıdakı sətirlər var:

error: something went wrong
warning: check your system
error: unable to connect

Bütün "error" ilə başlayan sətirləri "Issue Detected" ilə əvəzləmək istəyirik. Bu işdə regular ifadələr kömək edəcək:

sed 's/^error:.*/Issue Detected/' logs.txt

Harada ki:

  • ^ — sətirin başlanğıcını göstərir.
  • .* — "sonradan nə olursa olsun" deməkdir.

Nəticə:

Issue Detected
warning: check your system
Issue Detected

5. Sətir əlavə etmək və yerləşdirmək

Uyğunluğu tapmadan öncə sətir yerləşdirmək

Hər bir "Linux" daxil olan sətrin əvvəlində bir sətir yerləşdirmək üçün:

sed '/Linux/i\# Öyrənmək maraqlıdır' example.txt

Nəticə:

Hello world!
Welcome to Linux.
# Öyrənmək maraqlıdır
Linux is awesome.

Misal 2: Uyğunluğu tapdıqdan sonra sətir əlavə etmək

Şablonla uyğun gələn sətrin sonrasına mətn əlavə etmək üçün:

sed '/Linux/a\# sed bunu asanlaşdırır' example.txt

Nəticə:

Hello world!
Welcome to Linux.
# sed bunu asanlaşdırır
Linux is awesome.
# sed bunu asanlaşdırır

6. Təcrübə: konfiqurasiyon faylların işlənməsi

Praktiki bir tapşırıq həll etməyə çalışaq. Təsəvvür edin ki, sizdə config.txt adlı konfiqurasiya faylı var:

host=localhost
port=8080
mode=production
logfile=/var/log/app.log

Tapşırıq 1: "localhost"-ı "127.0.0.1"-ə dəyişmək

sed -i 's/localhost/127.0.0.1/' config.txt

Nəticə:

host=127.0.0.1
port=8080
mode=production
logfile=/var/log/app.log

Tapşırıq 2: Portu 1 artırmaq

Bunun üçün kiçik bir sed hiyləsindən istifadə edirik:

sed -i 's/port=8080/port=8081/' config.txt

Nəticə:

host=127.0.0.1
port=8081
mode=production
logfile=/var/log/app.log

Tapşırıq 3: logfile olan sətirləri silmək

Əgər konfiqurasiya artıq logların saxlanmasını tələb etmirsə, sətri silək:

sed -i '/logfile/d' config.txt

Nəticə:

host=127.0.0.1
port=8081
mode=production

7. Digər komandalarla kombinasiya

sed Linux-un digər alətləri ilə mükəmməl işləyir. Məsələn:

grep "error" logs.txt | sed 's/error/ERROR/'

Burada əvvəlcə xətaları olan sətirləri axtarırıq, sonra isə onları formatlayırıq.

Tipik səhvlər və onlardan necə qaçmalı

  • Səhv: -i seçimini unutmaq. Yeni başlayanlar tez-tez sed alətinin faylı dəyişəcəyini gözləyirlər, amma -i əlavə etmirlər. Faylı dəyişmək istəyirsinizsə, bunu açıq şəkildə qeyd etməyi unutmayın.
  • Səhv: dırnaq işarələri. Bəzi sistemlərdə, xüsusilə tək dırnaqlardan istifadə olunarsa, \ xüsusi simvollardan əvvəl düzgün işləməyə bilər. Həmişə simvolları düzgün şəkildə ekraniyalaşdırın.
  • Sətir diapazonları ilə səhv. Əgər diapazonlardan istifadə edirsinizsə (məsələn, 2,3d), onların düzgün qeyd edildiyinə əmin olun — fayl boş olmamalıdır.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION