Pengenalan | Satu lagi arahan berguna untuk Linux Foundation Certified System Administrators (LFCS) ialah "sed", yang asalnya bermaksud "Editor Penstriman". |
Arahan "sed" ialah editor yang boleh mengedit fail sebagai strim. Cara untuk menstrim fail adalah dengan menyalurkannya (> atau |) daripada arahan lain, atau memuatkannya terus ke dalam "sed".
Arahan ini berfungsi sama seperti editor lain, kecuali fail tidak dipaparkan dan pengeditan visual tidak dibenarkan. Perintah dihantar kepada "sed" untuk memanipulasi strim.
Terdapat lima perkara asas yang boleh anda lakukan dengan "sed". Sudah tentu, "sed" sangat berkuasa dan mempunyai ciri lanjutan lain, tetapi anda hanya perlu memberi tumpuan kepada lima perkara asas. Lima jenis fungsi adalah seperti berikut:
Cari
Gantikan
Padam
Tambah
tukar/transformasi
Sebelum kita menyelami parameter arahan, kita perlu melihat sintaks asas.
Sintaks arahan "sed" ialah:
sed [选项] 命令 [要编辑的文件]
Artikel ini akan merangkumi "pilihan" ini dalam bahagian yang sesuai. "Arahan" boleh menjadi pola carian dan penggantian ungkapan biasa. Teruskan membaca untuk mengetahui cara "sed" berfungsi dan mempelajari arahan asas. Seperti yang saya nyatakan sebelum ini, "sed" ialah alat yang sangat berkuasa dengan lebih banyak pilihan yang tersedia yang akan saya bahas dalam artikel ini.
Fail contohJika anda membuka terminal, anda boleh mencipta fail untuk contoh "sed". Jalankan arahan berikut:
cd ~ grep --help >grephelp.txt
Anda kini sepatutnya mempunyai fail bernama grephelp.txt dalam folder HOME anda. Kandungan fail ini adalah arahan bantuan untuk arahan grep.
CariMencari rentetan tertentu ialah ciri biasa editor dan melakukan carian dalam "sed" tidak terkecuali.
Lakukan carian untuk mencari rentetan dalam fail. Mari kita lihat carian asas.
Jika kami ingin mencari perkataan PATTERN dalam fail contoh, kami akan menggunakan arahan berikut:
sed -n 's/PATTERN/PATTERN/p' grephelp.txt
Nota: Jika anda memotong dan menampal arahan, pastikan anda menggantikan petikan tunggal dengan petikan tunggal standard pada papan kekunci anda.
Parameter -n digunakan untuk menyekat pencetakan automatik setiap baris (kecuali baris yang ditentukan dengan arahan p). Secara lalai, setiap baris yang dimasukkan ke dalam "sed" akan dicetak ke output standard (stdout). Jika anda menjalankan arahan di atas tanpa pilihan "-n", anda akan melihat setiap baris fail asal bersama-sama dengan baris yang sepadan.
Nama fail untuk dicari ialah "grephelp.txt" yang kami buat di bahagian "Fail Contoh".
Bahagian yang tinggal ialah 's/PATTERN/PATTERN/p' . Bahagian ini pada asasnya dibahagikan kepada empat bahagian. Bahagian pertama s menentukan untuk melakukan penggantian, atau carian dan ganti.
Baki bahagian kedua dan ketiga adalah corak. Yang pertama ialah corak untuk dicari, dan yang terakhir ialah corak untuk menggantikan rentetan padanan dalam strim. Dalam contoh ini, kita mencari rentetan PATTERN dan menggantikannya dengan PATTERN. Dengan mencari dan menggantikan rentetan yang sama, kami tidak menukar fail sama sekali, walaupun pada skrin.
Arahan terakhir ialah p. Ia menyatakan bahawa baris baru dicetak selepas penggantian. Sudah tentu, kerana rentetan yang sama diganti, tiada apa yang berubah. Memandangkan kami menekan garis pencetakan menggunakan parameter -n, baris yang diubah akan dicetak menggunakan arahan p.
Arahan lengkap ini membolehkan kami melakukan carian dan melihat hasil yang sepadan.
PenggantiApabila mencari rentetan tertentu, anda mungkin mahu menggantikan rentetan baharu dengan rentetan yang sepadan. Menggantikan rentetan dengan yang lain adalah operasi yang sangat biasa.
Kita boleh melakukan carian yang sama menggunakan arahan berikut:
sed -n 's/PATTERN/Pattern/p' grephelp.txt
Pada masa ini, rentetan "PATTERN" bertukar kepada "Corak" dan dipaparkan. Jika anda melihat fail menggunakan arahan cat grephelp.txt, anda akan melihat bahawa fail itu tidak berubah. Perubahan ini dibuat hanya pada output pada skrin. Anda boleh memaipkan output ke fail lain menggunakan:
sed 's/PATTERN/Pattern/' grephelp.txt > grephelp1.txt
Fail baharu bernama grephelp1.txt kini akan wujud dengan fail yang diubah disimpan di dalamnya. Jika p dibiarkan sebagai pilihan keempat, masalahnya ialah setiap baris rentetan yang diganti akan diulang dua kali dalam fail. Kami juga boleh mengalih keluar parameter "-n" untuk membolehkan semua baris dicetak.
Cara lain untuk menggantikan rentetan dengan rentetan yang sama ialah menggunakan simbol & untuk mewakili rentetan carian. Sebagai contoh, arahan s/PATTERN/&/p mempunyai kesan yang sama. Kita boleh menambah rentetan, contohnya untuk menambah S, kita boleh menggunakan arahan s/PATTERN/&S/p.
Bagaimana jika kita mahu menggantikan hanya corak tertentu dalam setiap baris? Anda boleh menentukan kejadian tertentu padanan untuk diganti. Sudah tentu, penggantian setiap baris adalah nombor tertentu. Sebagai contoh, fail contoh mempunyai banyak sempang padanya. Sesetengah baris mempunyai sekurang-kurangnya dua sengkang, jadi kita boleh menggantikan sengkang kedua pada setiap baris dengan aksara lain. Perintah untuk menggantikan sempang kedua - dengan asterisk * pada setiap baris ialah:
sed 's/-/*/2' grephelp.txt
Di sini, kami menggunakan s asal untuk melakukan penggantian. Aksara - digantikan dengan *. 2 bermakna kita mahu menggantikan yang kedua - pada setiap baris jika ia wujud. Jika kita meninggalkan arahan 2, kejadian pertama sempang akan diganti. Hanya sempang pertama diganti dan bukannya sempang dalam setiap baris.
Jika anda ingin mencari dan menggantikan semua sempang pada baris dengan asterisk, gunakan arahan g:
sed 's/-/*/g' grephelp.txt
Arahan juga boleh digabungkan. Katakan anda ingin menggantikan tanda sempang yang muncul bermula dari kali kedua, arahannya ialah:
sed 's/-/*/2g' grephelp.txt
现在从第二个开始出现的破折号将被星号取代。
删除搜索过程中有很多时候你可能想要完全删除搜索字符串。
例如,如果要从文件中删除所有破折号,你可以使用以下命令:
sed 's/-//g' grephelp.txt
替换字符串为空白,因此匹配的字符串将被删除。
添加当找到匹配时,你可以添加一行特定的文本,来使这行在浏览或打印中突出。
如果要在匹配后插入新行,那么使用 a 命令,后面跟上新行的字符串。还包括要匹配的字符串。例如,我们可以找到一个 --,并在匹配的行之后添加一行。新行的字符串将是 double dash before this line。
sed '/--/ a "double dash before this line"' grephelp.txt
如果要在包含匹配字符串的行之前加上这行,请使用 i 命令,如下所示:
sed '/--/ i "double dash after this line"' grephelp.txt
如果需要改变/变换一行,则可以使用命令 c。
假设我们有个有一些私人信息的文档,我们需要更改包含特定字符串的行。c 命令将改变整行,而不仅仅是搜索字符串。
假设我们想要阻止示例文件中包含单词 PATTERN 的每一行。更改的行将显示为 This line is Top Secret。命令是:
sed '/PATTERN/ c This line is Top Secret' grephelp.txt
可以进行更改特定字母的大小写的转换。例如,我们可以使用命令 y 将所有小写 a 更改为大写 A,如下所示:
sed 'y/a/A/' grephelp.txt
可以指定多个字母,如 abdg,如下命令所示:
sed 'y/abdg/ABDG/' grephelp.txt
确保第二组字母与第一组字母的顺序相同,否则会被替换和转换。例如,字符串 y/a/D/ 将用大写 D 替换所有小写的 a。
就地更改如果你确实要更改所使用的文件,请使用 -i 选项。
例如,要将 PATTERN 改为 Pattern,并对文件进行更改,则命令为:
sed -i 's/PATTERN/Pattern/' grephelp.txt
现在文件 grephelp.txt 将被更改。-i 选项可以与上述任何命令一起使用来更改原始文件的内容。
练习这些命令,并确保你理解它们。“sed” 命令非常强大。
(题图:Pixabay,CC0)
Atas ialah kandungan terperinci Pengenalan: Ketahui cara menggunakan sed dalam asas LFCS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!