GNU/Linux >> Znalost Linux >  >> Linux

Může Sed nahradit nové řádkové znaky?

Je problém se znakem sed a nového řádku?
Mám soubor test.txt s následujícím obsahem

aaaaa  
bbbbb  
ccccc  
ddddd  

Následující nefunguje:
sed -r -i 's/n/,/g' test.txt

Vím, že mohu použít tr pro to, ale moje otázka je, proč se to zdá být nemožné se sed.

Pokud je to vedlejší efekt zpracování souboru řádek po řádku, zajímalo by mě, proč se to děje. Myslím, že grep odstraní nové řádky. Dělá sed totéž?

Přijatá odpověď:

S GNU sed a poskytl POSIXLY_CORRECT není v prostředí (pro jednořádkový vstup):

sed -i ':a;N;$!ba;s/n/,/g' test.txt

Z https://stackoverflow.com/questions/1251999/sed-how-can-i-replace-a-newline-n :

  1. vytvořte štítek pomocí :a
  2. připojit aktuální a další řádek do prostoru vzoru pomocí N
  3. pokud jsme před posledním řádkem, odbočíme na vytvořený štítek $!ba ($! znamená nedělat to na posledním řádku (protože by tam měl být jeden poslední nový řádek)).
  4. nakonec nahrazení nahradí každý nový řádek čárkou v prostoru vzoru (což je celý soubor).

Linux
  1. Jak použít Sed k výměně víceřádkového řetězce?

  2. Jak použít Sed nebo Ex k nahrazení bloku (víceřádkového kódu) novým blokem textu (kódu)?

  3. Sed na Osx vložce na určitém řádku?

  1. Jak nahradit text podobný sedu pythonem?

  2. Jak nahradit řetězec ve více souborech v příkazovém řádku linuxu

  3. sed:jak nahradit řádek, pokud byl nalezen, nebo připojit na konec souboru, pokud nebyl nalezen?

  1. Multi-Line Sed Vyměnit

  2. Jak rekurzivně nahradit znaky sed?

  3. SED nahradit na více řádcích