Powiedzmy, że mam zmienną powłoki, $string
która zawiera tekst z kilkoma znakami nowej linii, np .:
string="this
is
a test"
Chciałbym przekonwertować ten ciąg na nowy, w new_string
którym wszystkie podziały wierszy są konwertowane na spacje:
new_string="this is a test"
Próbowałem:
print $string | sed 's/\n/ /g'
ale to nie zadziałało
Zastanawiam się także, czy istnieje sposób, aby to zrobić za pomocą, perl -0777 's/\n/ /g'
a może polecenia tr
?
Odpowiedzi:
Jeśli chcesz tylko usunąć nowe linie w ciągu, nie musisz go używać
sed
. Możesz użyć tylkojak wskazali inni.
Ale jeśli chcesz przekonwertować nowe linie na spacje w pliku za pomocą
sed
, możesz użyć:a nawet
awk
:źródło
sponge
jest użytecznym narzędziem do nadpisywania pliku wejściowego. Jest częścią pakietumoreutils
... np.awk '$1=$1' ORS=' ' file |sponge file
moreutils
...Możesz
tr
zamiast tego spróbować użyć :źródło
Jeszcze inną opcją byłoby użycie
xargs
(która dodatkowo wyciska wiele białych znaków):źródło
Echo ignoruje białe znaki, więc powinno działać:
źródło
Jeśli masz już ciąg jako zmienną bash, jak Twoje przykład pokazuje, że nie ma sensu i marnotrawstwo zasobów (i więcej typowania) zadzwonić
sed
,awk
,printf
itd ... Można po prostu użyć bash ekspansji zmiennej :Nie musisz nawet przypisywać go ponownie. Możesz użyć rozszerzenia w obecnej postaci i pozostawić
$string
bez zmian.źródło
Możesz także wypróbować to polecenie awk,
Przykład:
źródło
Konwertuje to dowolną sekwencję jednego lub więcej
\n
znaków ewline występujących w zmiennej powłoki$string
na jedną<space>
.źródło
Możesz użyć prostej komendy sed
źródło