在 sed 中使用变量 (UNIX)
Using variables with sed (UNIX)
我正在尝试读取日志文件并创建一个新文件,其中仅包含给定日期和时间之后的条目。例如,我只在下面的日志中 07:00:00.000 之后寻找:
2015-01-16 00:00:00.001 DATA
2015-01-16 07:05:00.121 DATA
2015-01-16 07:10:15:543 DATA
会去:
2015-01-16 07:05:00.121 DATA
2015-01-16 07:10:15:543 DATA
我已经可以使用它了:
sed -n '/^2015-01-16 07/,$p' oglog.log > newlog.log
但是当我尝试通过变量添加日期时:
date=$(date -d -1hour +'%Y-%m-%d %H')
我无法让它工作。我知道您需要通过双引号或单引号 (https://askubuntu.com/questions/76808/how-to-use-variables-in-sed-command) 获取 shell 来扩展变量,但是使用这两种方法中的任何一种都会导致 $p
的替换部分出现问题命令。如何获得 shell 扩展一个变量而不扩展另一个变量并使用类似于下面的命令?
sed -n '/^$date/,$p' oglog.log > newlog.log
sed -n "/^$date/"',$p' oglog.log > newlog.log
您希望 $date
由 shell 扩展,因此需要用双引号引起来。您不希望 $p
被 shell 扩展,因此需要用单引号引起来。您也可以使用反斜杠来防止 shell 扩展 $p
,但如果您在正则表达式中有其他有意义的反斜杠,那很快就会变得令人讨厌:
sed -n "/^$date/,$p" oglog.log > newlog.log
使用
sed -n "/^$date/,$p" oglog.log > newlog.log
变量没有用单引号展开。
"Double quote" 每个包含 spaces/metacharacters 和 每个 扩展的文字:"$var"
、"$(command "$var")"
、"${array[@]}"
, "a & b"
。使用 'single quotes'
作为代码或文字 $'s: 'Costs US'
、ssh host 'echo "$HOSTNAME"'
。参见
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words
我正在尝试读取日志文件并创建一个新文件,其中仅包含给定日期和时间之后的条目。例如,我只在下面的日志中 07:00:00.000 之后寻找:
2015-01-16 00:00:00.001 DATA
2015-01-16 07:05:00.121 DATA
2015-01-16 07:10:15:543 DATA
会去:
2015-01-16 07:05:00.121 DATA
2015-01-16 07:10:15:543 DATA
我已经可以使用它了:
sed -n '/^2015-01-16 07/,$p' oglog.log > newlog.log
但是当我尝试通过变量添加日期时:
date=$(date -d -1hour +'%Y-%m-%d %H')
我无法让它工作。我知道您需要通过双引号或单引号 (https://askubuntu.com/questions/76808/how-to-use-variables-in-sed-command) 获取 shell 来扩展变量,但是使用这两种方法中的任何一种都会导致 $p
的替换部分出现问题命令。如何获得 shell 扩展一个变量而不扩展另一个变量并使用类似于下面的命令?
sed -n '/^$date/,$p' oglog.log > newlog.log
sed -n "/^$date/"',$p' oglog.log > newlog.log
您希望 $date
由 shell 扩展,因此需要用双引号引起来。您不希望 $p
被 shell 扩展,因此需要用单引号引起来。您也可以使用反斜杠来防止 shell 扩展 $p
,但如果您在正则表达式中有其他有意义的反斜杠,那很快就会变得令人讨厌:
sed -n "/^$date/,$p" oglog.log > newlog.log
使用
sed -n "/^$date/,$p" oglog.log > newlog.log
变量没有用单引号展开。
"Double quote" 每个包含 spaces/metacharacters 和 每个 扩展的文字:"$var"
、"$(command "$var")"
、"${array[@]}"
, "a & b"
。使用 'single quotes'
作为代码或文字 $'s: 'Costs US'
、ssh host 'echo "$HOSTNAME"'
。参见
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words