Как создать сценарий оболочки с помощью команды cal

sed -z 's/\n/,/g' input.txt

Опция -z(только в sed версии 4.2 или более поздней )ожидает нулевой -байт в качестве символа конца записи вместо символа новой строки, обрабатывая весь этот входной файл как одну строку. Найдите\n(символ новой строки )и замените запятой. gделает поиск -заменой глобального.

Он также преобразует последний символ новой строки в запятую, но конечную запятую легко преобразовать обратно:

sed -z 's/\n/,/g' input.txt | sed 's/,$/\n/'

Символ $отмечает конец строки, поэтому последняя запятая заменяется символом новой строки.

Обратите внимание, что если ваш входной файл содержит какие-либо нулевые -байты (, часто используемые в двоичных файлах для завершения строк ), тогда они будут рассматриваться как маркеры конца записи. Приведенный выше пример не должен быть затронут, но в некоторых ситуациях он может дать неожиданные результаты.

-2
04.10.2020, 14:44
2 ответа

Вот что на самом деле делает ваш скрипт:

#!/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      
3
18.03.2021, 23:00
#!/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  
0
18.03.2021, 23:00

Теги

Похожие вопросы