我有一个名为 (document_determinationv1.txt) 的文本文件。此文本文件包含下面提到的两行。我想从第二行获取日期 (20210805),并想使用 shell 脚本命令将其存储在变量中。我是 Linux 新手。提前致谢。
[DOCUMENT_DETERMINATION]
#REVISION:v1;DATE:20210805
答案1
与往常一样,根据具体要求,有多种方法可以实现这一点。
作为最简单的方法之一,您可以这样做:
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 之间的换行符。
但只要您能保证文件具有您在问题中引用的确切格式,它就能正常工作。
答案2
您可以执行以下操作:
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