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-tezsed
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.
GO TO FULL VERSION