У меня есть текстовый файл с именем (document_determinationv1.txt). Этот текстовый файл содержит две строки, которые указаны ниже. Я хочу получить дату(20210805) из второй строки и сохранить в переменной, используя команды сценария оболочки. Я новичок в Linux. Заранее спасибо.
[DOCUMENT_DETERMINATION]
#REVISION:v1;DATE:20210805
Вы можете сделать следующее:
cat file.txt | sed "2q;d" | awk -F: '{print $3}'
cat
выводит содержимое файла в канал sed
берет этот канал и выводит вторую строку awk
, разделяет двоеточиями и, наконец, выводит третий аргумент . Вы можете попробовать каждую команду отдельно.
А если вы хотите сохранить все данные в переменной, используйте синтаксис $ (command)
:
VAR=$(cat file.txt | sed "2q;d" | awk -F: '{print $3}')
И распечатайте результат:
echo $VAR
Как всегда, есть несколько способов сделать это, в зависимости от конкретных требований.
В качестве одного из самых простых способов вы можете сделать:
AVARIABLE=$(sed -ne 's/.*DATE://p' document_determinationv1.txt)
Это не имеет значения , в какой строке находится дата. Он будет работать до тех пор, пока ваш файл содержит ровно одну строку, содержащую ключевое слово DATE, за которым следует двоеточие и дата, которую вы хотите извлечь. Он также не будет проверять, отображается ли DATE как отдельное слово, является ли часть после DATE: датой или за ней следует какой-либо дополнительный мусор. Если ваш файл содержит более одной строки, содержащей DATE, за которой следует двоеточие, тогда он поместит все части после каждой DATE: в переменную, разделенную символами новой строки, что может или не может нанести ущерб вашей дальнейшей обработке. Так что, если ваш файл содержит, например:
[DOCUMENT_DETERMINATION]
#REVISION:v1;DATE:20210805;WEIGHT:123kg
[REAL_DETERMINATION]
#PRIME:13;CANDIDATE:BART SIMPSON
, тогда команда с радостью поместит
20210805;WEIGHT:123kg
BART SIMPSON
в переменную, включая новую строку между буквами g и B.
Но если вы можете гарантировать, что файл имеет точно такой же формат, который вы указали в своем вопросе, он будет работать нормально.