sed -z 's/\n/,/g' input.txt
Опция -z
(только в sed версии 4.2 или более поздней )ожидает нулевой -байт в качестве символа конца записи вместо символа новой строки, обрабатывая весь этот входной файл как одну строку. Найдите\n
(символ новой строки )и замените запятой. g
делает поиск -заменой глобального.
Он также преобразует последний символ новой строки в запятую, но конечную запятую легко преобразовать обратно:
sed -z 's/\n/,/g' input.txt | sed 's/,$/\n/'
Символ $
отмечает конец строки, поэтому последняя запятая заменяется символом новой строки.
Обратите внимание, что если ваш входной файл содержит какие-либо нулевые -байты (, часто используемые в двоичных файлах для завершения строк ), тогда они будут рассматриваться как маркеры конца записи. Приведенный выше пример не должен быть затронут, но в некоторых ситуациях он может дать неожиданные результаты.
Вот что на самом деле делает ваш скрипт:
#!/bin/bash
## Run the command 'cal' with two empty strings as arguments
cal "" ""
## print the string "Write month and year"
echo Write month and year
## read whatever value was given into the single variable "$cal"
read cal
## print out the contents of the variable "$cal"
echo $cal
Я думаю, что вы хотели сделать:
#!/bin/sh
read -p "Write month and year: " month year
cal "$month" "$year"
Затем вы должны запустить это следующим образом (в примере пользователь ввел 4
и2020
):
$ foo.sh
Write month and year: 4 2020
April 2020
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Конечно, особого смысла в этом нет, так как вы фактически ничего не добавляете к нативной cal
команде:
$ cal 4 2020
April 2020
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
#!/bin/bash
echo "enter the year"
read y
echo "enter the month"
read m
cal -m $m $y
Протестировано и работает после использования -опции m Протестировано в системе Ubuntu
January 2020
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31