🎩 Bash: Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ тСкстов β€” sed. НСкоторыС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹.

На Ρ‡Π΅ΠΌ ΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π½ΠΎ: Rocky Linux 9.5 (Blue Onyx)/ Debian GNU/Linux 12 (bookworm)/Ubuntu 24.04.1 LTS/ Fedora Linux 41 (KDE Plasma)

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° sed.

Sed (ΠΎΡ‚ Π°Π½Π³Π». Stream EDitor) β€” консольная ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° для рСдактирования тСкстовых ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Она позволяСт ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ, ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строки Π² тСкстовых Ρ„Π°ΠΉΠ»Π°Ρ… ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Основная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ sed β€” ΠΎΠ½ читаСтся строка Π·Π° строкой, выполняСт Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π½Π΅ измСняя исходный Ρ„Π°ΠΉΠ», Ссли это Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ явно.

Как Π½Π°ΠΉΡ‚ΠΈ строку ΠΈ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘?

Иногда Π±Ρ‹Π²Π°Π΅Ρ‚ Π½ΡƒΠΆΠ½ΠΎ скриптом ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹.

Π—Π΄Π΅ΡΡŒ рассмотрим ΠΊΠ°ΠΊ Π½Π°ΠΉΡ‚ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΡƒΡŽ строку ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΌΡƒ слову ΠΈ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ ΠΈΠ»ΠΈ ΡΠ½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ sed.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ставится ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ:

$ sed -i '/<слово>/s/^/#/' /<Ρ„Π°ΠΉΠ»>
  • sed -i β€” ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»;
  • <слово> β€” ΠΈΡ‰Π΅ΠΌ строки с этим словом;
  • s β€” Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ;
  • ^ β€” Ρ‡Ρ‚ΠΎ замСняСм (Π½Π°Ρ‡Π°Π»ΠΎ строки);
  • # β€” Π½Π° Ρ‡Ρ‚ΠΎ замСняСм;
  • <Ρ„Π°ΠΉΠ»> β€” Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Π‘Π½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ:

$ sed -i '/<слово>/s/#//' /<Ρ„Π°ΠΉΠ»>

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

$ cd ~
$ mcedit test.txt
$ cat test.txt

ΠžΡ‚Π²Π΅Ρ‚:

яблоко
Π³Ρ€ΡƒΡˆΠ°
вишня
$ sed -i '/вишня/s/^/#/' test.txt
$ cat test.txt

ΠžΡ‚Π²Π΅Ρ‚:

яблоко
Π³Ρ€ΡƒΡˆΠ°
#вишня
$ sed -i '/вишня/s/#//' test.txt
$ cat test.txt
яблоко
Π³Ρ€ΡƒΡˆΠ°
вишня

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»Ρ‹ источников ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

  1. telegra.ph Β«Bash. Найти строку ΠΈ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ sedΒ».

Π’Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΡ‚ΡŒΡΡ...