Как добавить два пробела в конце строк, которые соответствуют двум разным строкам

#bash #awk #sed #replace #markdown

#bash #awk #sed #заменить #Уценка

Вопрос:

Я пишу скрипт bash и хотел бы добавить два пробела в конце строк, соответствующих двум разным строкам в файле, возможно, с помощью sed или awk.

Вот часть моего файла

 ### La justice européenne consacre le principe de neutralité du Net
Pour la première fois, une décision de justice a tranché : un fournisseur d'accès à Internet ne peut privilégier certains services ou applications au détriment d'autres. 
https://www.01net.com/actualites/la-justice-europeenne-consacre-le-principe-de-neutralite-du-net-1976661.html
Source : 01net

### La RRH 5G Open Source de Rapid.Space a convaincu Deutsche Telekom
L'entreprise française Rapid.Space est arriveé en tête du programme Telecom Infra Project (TIP) dans la catégorie des réseaux d'accès radio virtualisés (vRAN). Une victoire de plus pour l'open source.
https://www.toolinux.com/?la-rrh-5g-open-source-de-rapid-space-a-convaincu-deutsche-telekom
Source : TOOLinux

### iOS 14 : faire de Firefox votre navigateur par défaut
La sortie du système d'exploitation iOS d'Apple ce mercredi donne une nouvelle possibilité aux utilisateurs de Firefox. En faire leur navigateur par défaut. Voici comment ça marche.
https://www.toolinux.com/?ios-14-faire-de-firefox-votre-navigateur-par-defaut
Source : TOOLinux

### Doctorant·e·s, bienvenue en science ouverte !
Vous êtes en début de thèse et apprenti·e chercheur·e ? Vous avez entendu parler de la science ouverte mais n'avez pas encore passé sa frontière ou tout juste commencé à explorer ses territoires ? Le Passeport pour la science ouverte est le guide conçu pour vous accompagner à chaque étape, du début de votre recherche à la diffusion de vos résultats !

Source : Ouvrir la Science

### Liiibre, une solution complète pour vos projets collaboratifs
Hier, mardi 15 septembre, les copains et copines de Indie Hosters (structure membre du Collectif des Hébergeurs Alternatifs Transparents Ouverts Neutres et Solidaires) ont officiellement mis en ligne leur nouvelle solutionamp;#160;: Liiibre. Iels nous avaient parlé de ce projet pendant la période de confinement et au sein de Framasoft, on les avait encouragé⋅es dans cette voie. En effet, chez Framasoft, nous  accompagnons depuis plusieurs années

Source : Framablog
  

Я хочу добавить два пробела, когда строка не начинается с «###» или «Источник».

Это простой текстовый файл, который я хочу преобразовать в markdown, поэтому мне нужно добавить два пробела для разрывов строк.

Надеюсь, вы сможете помочь.

Комментарии:

1. Покажите, что вы уже пробовали.

2. Хорошо, что вы упомянули, что вы попробовали несколько вещей. Пожалуйста, добавьте их в свой вопрос, так как это настоятельно рекомендуется в SO, приветствия.

3. Я не сохранил никаких записей о том, что именно я пробовал (поскольку я вижу комментарии, я сделаю это в следующий раз), но стратегия была такова: найдите строки, которые не начинаются с некоторых строк, и добавьте два пробела / найдите строку, начинающуюся с некоторой строки, и добавьте пробелы в конце следующих двух строк / добавьте два пробела в конце каждой строки и удалите два пробела, когда строка начинается с некоторой строки / добавьте разные фиктивные символы в конце строк и замените их двумя пробелами… Я пробовал с grep, awk и sed.

Ответ №1:

Это может сработать для вас (GNU sed):

 sed -i '/^###|^Source/!s/$/  /' file
  

Если строка не начинается с ### или Source добавьте два пробела в конец строки.

Комментарии:

1. Это то, что я искал! Я внес небольшую модификацию, чтобы избежать добавления двух пробелов в пустые строки sed -i '/^###|^$|^Source/!s/$/ /' file

Ответ №2:

Не могли бы вы попробовать следующее.

 awk '!/^#/ amp;amp; !/source/{print $0,"","";next} 1' Input_file
  

Объяснение: просто ищите строки, которые не начинаются с #, и, наконец, печатайте строку с 2 пробелами, next пропустит переход к 1 (что является awk способом печати текущих строк), если какая-либо строка начинается с #, тогда она просто напечатает ее.

2-е решение: использование printf :

 awk '!/^#/ amp;amp; !/source/{printf("%s  n",$0);next} 1' Input_file
  

Ответ №3:

Этот awk добавит два пробела в конце, но если уже есть пробелы, он заменит их на два.

 $ awk '!/^(#|Source)/{sub(/ *$/,"  ")}1' file
  

Если вас не волнует последнее, вы можете просто добавить два пробела:

 $ awk '!/^(#|Source)/{$0=$0 "  "}1' file
  

Ответ №4:

Если у вас есть доступ к узлу в вашей системе, вы можете сделать

 rexreplace '^((?!#|Source).*)$' '€1  ' file
  

после глобальной установки npm -i rexreplace -g или запуска с npx добавлением