如何在shell脚本中存储sed命令的输出

时间:2014-01-13 10:04:41

标签: shell

past_date=`date +"%Y-%m-%d" -d "-60 day"`
initial_date= sed -n "/$past_date/p" 'logfile.txt' | head -1 | sed -e 's/\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\).*/\1/'
echo $initial_date

/ *我试图将sed命令的结果存储到initial_date变量中。但是没有任何内容存储在initial_date * /

2 个答案:

答案 0 :(得分:1)

要将命令输出存储到变量$var中,请使用var=$(command)语法:

initial_date=$(sed -n "/$past_date/p" 'logfile.txt' | head -1 | sed -e 's/\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\).*/\1/')

然后要打印结果,总是建议引用变量:

echo "$initial_date"

更新

如果您正在寻找logfile.txt中的第一个date hourdate $past_date,那么您可以使用:

grep -o -m1 '2013-11-14 [0-9][0-9]:[0-9][0-9]:[0-9][0-9]' logfile.txt 

鉴于此示例文件:

$ cat logfile.txt 
hello 2013-11-14 11:12:33
2013-11-14 11:12:33
2013-21-14 11:12:33
2013-r2:33
2013-19-14
2013-11-10 adf

$ grep -o -m1 '2013-11-14 [0-9][0-9]:[0-9][0-9]:[0-9][0-9]' logfile.txt 
2013-11-14 11:12:33
$ data=$(grep -o -m1 '2013-11-14 [0-9][0-9]:[0-9][0-9]:[0-9][0-9]' logfile.txt)
$ echo $data
2013-11-14 11:12:33

答案 1 :(得分:0)

initial_time = echo $line | sed -e 's/\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\).*/\1/'