grep 文件中的特定参数
grep specific parameter from a file
我正在尝试从 grep 结果中获取目录路径,以便在备份失败时删除目录。
那么我如何从下面获取目标目录(确切地说 /backups/incr/2015-04-07_10-00-01/2015-04-08_09-35-42)。
val=`grep -F -m 1 'target-dir=' innobackupex-runner.11498.tmp`
echo $val
150408 09:35:42 innobackupex: Starting ibbackup with command: xtrabackup --defaults-group="mysqld" --backup --suspend-at-end --target-dir=/backups/incr/2015-04-07_10-00-01/2015-04-08_09-35-42 --innodb_data_file_path="ibdata1:12M:autoextend" --tmpdir=/tmp --tables='.*[.].*' --extra-lsndir='/tmp' --incremental-basedir='/backups/incr/2015-04-07_10-00-01/2015-04-08_09-28-04'
val=`grep -F -m 1 'target-dir=' innobackupex-runner.11498.tmp | sed 's/..*target_dir=\(..*\) --innodb..*//' `
如果你的 grep 版本支持 Perl (-P
) 模式,你可以这样做:
val=$(grep -oP -m1 'target-dir=\K\S+' innobackupex-runner.11498.tmp)
-o
开关表示只打印匹配的部分。 \K
"kills" 之前的部分,只剩下 =
符号后的非 space 字符。
如果您的文件名包含 spaces!
,您将 运行 出问题
另一种选择,使用sed:
val=$(sed -n 's/.*target-dir=\([^[:space:]]\{1,\}\).*//p;q' innobackupex-runner.11498.tmp)
这实际上做了同样的事情,但使用了基本的正则表达式,任何符合 POSIX 的 sed 版本都支持这些正则表达式。
稍微短一些,使用扩展的正则表达式(-r
或 -E
with BSD sed):
val=$(sed -rn 's/.*target-dir=([^[:space:]]+).*//p;q' innobackupex-runner.11498.tmp)
我正在尝试从 grep 结果中获取目录路径,以便在备份失败时删除目录。
那么我如何从下面获取目标目录(确切地说 /backups/incr/2015-04-07_10-00-01/2015-04-08_09-35-42)。
val=`grep -F -m 1 'target-dir=' innobackupex-runner.11498.tmp`
echo $val
150408 09:35:42 innobackupex: Starting ibbackup with command: xtrabackup --defaults-group="mysqld" --backup --suspend-at-end --target-dir=/backups/incr/2015-04-07_10-00-01/2015-04-08_09-35-42 --innodb_data_file_path="ibdata1:12M:autoextend" --tmpdir=/tmp --tables='.*[.].*' --extra-lsndir='/tmp' --incremental-basedir='/backups/incr/2015-04-07_10-00-01/2015-04-08_09-28-04'
val=`grep -F -m 1 'target-dir=' innobackupex-runner.11498.tmp | sed 's/..*target_dir=\(..*\) --innodb..*//' `
如果你的 grep 版本支持 Perl (-P
) 模式,你可以这样做:
val=$(grep -oP -m1 'target-dir=\K\S+' innobackupex-runner.11498.tmp)
-o
开关表示只打印匹配的部分。 \K
"kills" 之前的部分,只剩下 =
符号后的非 space 字符。
如果您的文件名包含 spaces!
,您将 运行 出问题另一种选择,使用sed:
val=$(sed -n 's/.*target-dir=\([^[:space:]]\{1,\}\).*//p;q' innobackupex-runner.11498.tmp)
这实际上做了同样的事情,但使用了基本的正则表达式,任何符合 POSIX 的 sed 版本都支持这些正则表达式。
稍微短一些,使用扩展的正则表达式(-r
或 -E
with BSD sed):
val=$(sed -rn 's/.*target-dir=([^[:space:]]+).*//p;q' innobackupex-runner.11498.tmp)